Я пытаюсь использовать пару templatized функций для Ошибка замещения не является ошибкой (SFINAE). И я могу сделать это вот так:
template<typename R, typename S = decltype(declval<R>().test())> static true_type Test(R*);
template<typename R> static false_type Test(...);
Но я не понимаю, как аргумент делает этот SNFIAE. Похоже, я должен просто удалить аргументы, и выбор шаблона будет работать точно так же:
template<typename R, typename S = decltype(declval<R>().test())> static true_type Test();
template<typename R> static false_type Test();
Но это не так, я получаю:
Вызов перегруженного 'Test()' неоднозначен
Что происходит с этими аргументами, которые делают эту работу SFINAE?