Quando compila questo codice (senza intestazione)errore di compilazione quando si utilizza un membro di un definito dall'utente letterale
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;
}
I compilatori (sia g ++ 4.8 e clangore ++ 3.4 Ubuntu 14.04) si lamentano che
error: unable to find numeric literal operator ‘operator"" _f.temp’
100.0_f.temp;
^
Sembra che lo _f.temp
sia considerato un suffisso lì. Perché i compilatori la analizzano così, invece di fermarsi al punto?
Munch massimo. '100.0_f.temp' è un token * pp-number * valido. –
Passare a '(100.0_f) .temp' – Mine
@ T.C. Non ho idea che un token numero-pp possa contenere più di un punto. Potresti mostrarmi un esempio in questa forma? – neuront