Wenn Sie diesen Code kompilieren (ohne Header)Compile Fehler, wenn ein Mitglied einer benutzerdefinierten wörtlichen mit
template <typename T>
struct Temperature {
T temp;
explicit Temperature(T t)
: temp(t)
{}
};
Temperature<long double> operator "" _f (long double t)
{
return Temperature<long double>((t - 32)/1.8);
}
int main()
{
auto t = 100.0_f;
t.temp;
100.0_f.temp; // ERROR AT THIS LINE
return 0;
}
Die Compiler (beide g ++ 4.8 und Klirren ++ 3.4 auf Ubuntu 14.04) wird sich beschweren, dass
error: unable to find numeric literal operator ‘operator"" _f.temp’
100.0_f.temp;
^
Es scheint, dass die _f.temp
als Suffix dort gilt. Warum parsen die Compiler es so, anstatt am Punkt anzuhalten?
Maximale Munch. '100.0_f.temp' ist ein gültiges * pp-Nummer * -Token. –
Wechsel zu '(100.0_f) .temp' – Mine
@ T.C. Habe keine Ahnung, dass ein pp-Nummern-Token mehr als einen Punkt enthalten könnte. Können Sie mir ein Beispiel in einer solchen Form zeigen? – neuront