Подтвердить что ты не робот

Почему существует двусмысленность с использованием ссылочных квалификаторов при перегруженных методах?

Следующий код компилируется в Clang, но не в GCC. Когда я вызываю operator() с lvalue, он работает, но не с rvalue. Почему?

struct S
{
    bool operator()() const &  { return true; }
    bool operator()() const && { return true; }
};

int main()
{
    S s;

    s();   // works
    S()(); // fails (error: call of '(S) ()' is ambiguous)
}

Я компилирую этот код в GCC 4.8.

4b9b3361