Considere el siguiente programa demostrativo.
#include <iostream>
int main()
{
typedef float T;
0.f.T::~T();
}
Este programa está compilado por Microsoft Visual Studio Community 2019.
Pero clangy gccemitir un error como este
prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T'
7 | 0.f.T::~T();
| ^~~~~
Si escribir la expresión como ( 0.f ).T::~T()entonces, los tres compiladores compilan el programa.
Entonces surge una pregunta: ¿es este registro 0.f.T::~T()sintácticamente válido? Y si no, ¿qué regla sintáctica se rompe?
(0.f).T::~T();
float f = 1.0f.t;producirá el error sobre el literal numérico.
floates un tipo incorporado , no tiene un destructor al que pueda llamar. ¿Qué haces incluso llamando a destructores manualmente? Fuera del territorio de ubicación nueva, eso debería ser un gran no-no.
0.fy.Thace que tanto GCC como Clang acepten esto ...