Podczas kompilowania tego kodu (bez nagłówka)Błąd kompilacji przy użyciu członkiem zdefiniowany przez użytkownika dosłowne
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;
}
kompilatorów (zarówno g ++ 4.8, dzyń ++ 3.4 na Ubuntu 14.04) będzie narzekać, że
error: unable to find numeric literal operator ‘operator"" _f.temp’
100.0_f.temp;
^
Wygląda na to, że _f.temp
jest uważany za sufiks. Dlaczego kompilatory parsują go w ten sposób, zamiast zatrzymywać się na kropce?
Maksymalne chrupanie. '100.0_f.temp' jest poprawnym tokenem * numeru pp *. –
Zmień na '(100.0_f) .temp' – Mine
@ T.C. Nie mam pojęcia, że token numeru pp może zawierać więcej niż jedną kropkę. Czy możesz pokazać mi przykład w takiej formie? – neuront