следующий тест SFINAE не может проверить, является ли утка чем-то (это утка, если есть функция-член void quack ()).Я не понимаю почему.Есть идеи?
struct Duck
{
void quack() {}
};
struct Pig
{
void groink() {}
};
template<class T>
auto test_duck(const T& t, int)
-> decltype(t.quack(), bool())
{
return true;
}
template<class T>
auto test_duck(const T& t, long)
{
return false;
}
template<class T>
bool is_duck(const T& t)
{
return test_duck(t, 0);
}
int main()
{
Duck duck;
Pig pig;
cout << is_duck(duck) << endl;
cout << is_duck(pig) << endl;
}