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'd関数テンプレートと明示的なテンプレートの特殊化を組み合わせて使用する方法はありますか?