Considera il seguente programma dimostrativo.
#include <iostream>
int main()
{
typedef float T;
0.f.T::~T();
}
Questo programma è compilato da Microsoft Visual Studio Community 2019.
Ma clanged gccemettere un errore come questo
prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T'
7 | 0.f.T::~T();
| ^~~~~
Se scrivere l'espressione come ( 0.f ).T::~T()allora tutti e tre i compilatori compilano il programma.
Quindi sorge una domanda: questo record è 0.f.T::~T()sintatticamente valido? E se no, quale regola sintattica viene infranta?
(0.f).T::~T();
float f = 1.0f.t;produrrà l'errore sul valore letterale numerico.
floatè un built-in di tipo, non ha un distruttore di chiamare. Cosa stai facendo di chiamare manualmente i distruttori? Al di fuori del posizionamento-nuovo territorio, questo dovrebbe essere un grande no-no.
0.fe.Tfa sì che sia GCC che Clang accettino questo ...