このコードをコンパイルするとき (ヘッダーなし)
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;
}
コンパイラ (Ubuntu 14.04 の g++ 4.8 と clang++ 3.4 の両方) は、
error: unable to find numeric literal operator ‘operator"" _f.temp’
100.0_f.temp;
^
_f.temp
は接尾辞として考えられているようです。コンパイラがドットで停止するのではなく、そのように解析するのはなぜですか?