Проблема первоначально возникла в этом вопросе. Рассмотрим следующий код:
class Var
{
public:
operator int () const
{ return 0; }
template <typename T>
operator T () const
{ return T(); }
};
int main()
{
Var v;
switch (v)
{ }
}
Без operator int() const { return 0; }
оба g++ и clang отклонят код.
Однако приведенный выше код с operator int()
является принят клавишей, но отклонено g++ со следующей ошибкой:
main.cpp:17:14: error: default type conversion can't deduce template argument for 'template<class T> Var::operator T() const'
switch (v)
^
Какой компилятор прав?