Considere o seguinte programa demonstrativo.
#include <iostream>
int main()
{
typedef float T;
0.f.T::~T();
}
Este programa é compilado por Microsoft Visual Studio Community 2019.
Mas clange gccemita um erro como este
prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T'
7 | 0.f.T::~T();
| ^~~~~
Se escrever a expressão assim ( 0.f ).T::~T(), todos os três compiladores compilarão o programa.
Então surge uma pergunta: esse registro é 0.f.T::~T()sintaticamente válido? E se não, então que regra sintática está quebrada?
(0.f).T::~T();
float f = 1.0f.t;produzirá o erro sobre o literal numérico.
floaté um tipo embutido , não possui um destruidor para você chamar. O que você está fazendo manualmente chamando destruidores? Fora do território de colocação de novo, isso deve ser um grande não-não.
0.fe.Tfaz com que o GCC e o Clang aceitem isso ...