Betrachten Sie das folgende Demonstrationsprogramm.
#include <iostream>
int main()
{
typedef float T;
0.f.T::~T();
}
Dieses Programm wird zusammengestellt von Microsoft Visual Studio Community 2019.
Aber clangund gccgeben Sie einen Fehler wie diesen aus
prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T'
7 | 0.f.T::~T();
| ^~~~~
Wenn der Ausdruck wie ( 0.f ).T::~T()folgt geschrieben werden soll, kompilieren alle drei Compiler das Programm.
Es stellt sich also die Frage: Ist dieser Datensatz 0.f.T::~T()syntaktisch gültig? Und wenn nicht, welche syntaktische Regel ist dann gebrochen?
(0.f).T::~T();
float f = 1.0f.t;wird den Fehler über das numerische Literal erzeugen.
floatist ein eingebauter Typ, es gibt keinen Destruktor, den Sie aufrufen können. Was machst du überhaupt, wenn du Destruktoren manuell aufrufst? Außerhalb von Neuland sollte dies ein großes Nein-Nein sein.
0.fund setzen, werden.TGCC und Clang dies akzeptieren ...