Aşağıdaki örnek programı düşünün.
#include <iostream>
int main()
{
typedef float T;
0.f.T::~T();
}
Bu program tarafından derlenmektedir Microsoft Visual Studio Community 2019
.
Ama clang
ve gcc
bu gibi bir hata sorunu
prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T'
7 | 0.f.T::~T();
| ^~~~~
İfadeyi böyle yazmak için ( 0.f ).T::~T()
her üç derleyici de programı derler.
Yani bir soru ortaya çıkıyor: bu kayıt 0.f.T::~T()
sözdizimsel olarak geçerli mi? Ve eğer değilse, hangi sözdizimsel kural bozulur?
(0.f).T::~T();
float f = 1.0f.t;
, sayısal değişmezle ilgili hata üretir.
float
bir tiptir, aramanız için bir yıkıcı yoktur. Elle arama yapan yıkıcıları ne yapıyorsunuz? Yeni yerleşim bölgesinin dışında, bu büyük bir hayır-hayır olmalıdır.
0.f
ve.T
hem GCC ve Clang neden olur ... bunu kabul etmek