11

このコードをコンパイルするとき (ヘッダーなし)

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は接尾辞として考えられているようです。コンパイラがドットで停止するのではなく、そのように解析するのはなぜですか?

4

1 に答える 1