নিম্নলিখিত বিক্ষোভমূলক প্রোগ্রাম বিবেচনা করুন।
#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
জিসিসি এবং কলং উভয়কেই এটি স্বীকার করে তোলে ...