Pertimbangkan program demonstratif berikut.
#include <iostream>
int main()
{
typedef float T;
0.f.T::~T();
}
Program ini disusun oleh Microsoft Visual Studio Community 2019
.
Tapi clang
dan gcc
keluarkan kesalahan seperti ini
prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T'
7 | 0.f.T::~T();
| ^~~~~
Jika menulis ekspresi seperti itu ( 0.f ).T::~T()
maka ketiga kompiler mengkompilasi program.
Maka timbul pertanyaan: apakah rekaman ini secara 0.f.T::~T()
sintaksis valid? Dan jika tidak, lalu aturan sintaksis apa yang dilanggar?
(0.f).T::~T();
float f = 1.0f.t;
akan menghasilkan kesalahan tentang literal numerik.
float
adalah tipe bawaan , ia tidak memiliki destruktor untuk Anda panggil. Apa yang bahkan Anda lakukan secara manual memanggil destruktor? Di luar wilayah penempatan baru, yang harus menjadi besar tidak-tidak.
0.f
dan.T
menyebabkan GCC dan Dentang menerima ini ...