निम्नलिखित प्रदर्शन कार्यक्रम पर विचार करें।
#include <iostream>
int main()
{
typedef float T;
0.f.T::~T();
}
यह कार्यक्रम द्वारा संकलित है Microsoft Visual Studio Community 2019
।
लेकिन clang
और gcc
इस तरह एक त्रुटि जारी करते हैं
prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T'
7 | 0.f.T::~T();
| ^~~~~
यदि अभिव्यक्ति लिखना है ( 0.f ).T::~T()
तो तीनों संकलनकर्ता कार्यक्रम को संकलित करते हैं।
तो एक सवाल उठता है: क्या यह रिकॉर्ड 0.f.T::~T()
वाक्यात्मक रूप से वैध है? और यदि नहीं, तो क्या वाक्यात्मक नियम टूट गया है?
(0.f).T::~T();
float f = 1.0f.t;
संख्यात्मक शाब्दिक के बारे में त्रुटि पैदा करेगा।
float
एक अंतर्निहित प्रकार है, इसमें कॉल करने के लिए आपके पास एक विध्वंसक नहीं है। आप मैन्युअल रूप से विध्वंसक कॉलिंग भी कर रहे हैं? प्लेसमेंट-नए क्षेत्र के बाहर, यह एक बड़ा नहीं-नहीं होना चाहिए ।
0.f
और.T
दोनों जीसीसी और बजना का कारण बनता है यह स्वीकार करने के लिए ...