struct X{}; template
decltype(X() == int()) f(T const&){ return true; } int main(void) { X x; f(x); } Почему, только почему? Нет
оператора ==
, определенного нигде !Я действительно хочу понять, что здесь происходит, чтобы предоставить подробный отчет об ошибках в MS Connect. Мое путешествие к безумию началось где-то здесьв чате Lounge
... (Примечание: ни GCC, ни Clang не принимают этот код.)
О, да! и кстати, добавление частного
X(int)
ctor приводит к сбою компиляции:struct X{ X(){} private: X(int); }; template
decltype(X() == int()) f(T const&){ return true; } int main(void) { X x; f(x); } Вывод:
1>src\main.cpp(12): error C2248: 'X::X' : cannot access private member declared in class 'X' 1> src\main.cpp(4) : see declaration of 'X::X' 1> src\main.cpp(1) : see declaration of 'X'