У меня есть следующий код, который не компилируется в VC2010:
#include <type_traits>
using namespace std;
template <class C>
typename enable_if<true, C>::type
foo()
{ return C(); }
template <>
bool
foo()
{ return true; } // error C2785: 'enable_if<true,_Type>::type foo(void)'
// and 'bool foo(void)' have different return types
int main()
{
auto a = foo<int>();
auto b = foo<bool>();
}
Сообщение об ошибке кажется ошибочным, так как первая версия foo()
кажется функционально идентичной template <class C> C foo();
, которая успешно компилируется.
Есть ли способ смешивать и сопоставлять шаблоны функций enable-if и явные специализации шаблонов?
template<> bool foo<bool>()
? - person edA-qa mort-ora-y   schedule 29.09.2011