struct X{};
template<class T>
decltype(X() == int()) f(T const&){ return true; }
int main(void) {
X x;
f(x);
}
Почему, почему? Не существует operator==
где-либо!
Я действительно хочу понять, что происходит здесь, чтобы предоставить подробный отчет об ошибке в MS Connect. Мое путешествие к безумию началось вокруг здесь в чате Lounge < С++ > ...
(Примечание: ни GCC, ни Clang не принимают этот код.)
О, и btw, добавление частного X(int)
ctor приводит к сбою компиляции:
struct X{
X(){}
private:
X(int);
};
template<class T>
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'