我有以下代码无法在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函数模板和显式模板专门化?
发布于 2011-09-29 20:57:15
函数模板专门化(谢天谢地!)不需要返回与非专门化模板相同的类型,所以这里不是问题所在。
实际上,enable_if与您的错误无关,您的代码只是在专门化中缺少模板参数列表:
template <>
bool foo<bool>()
{ return true; }顺便说一句,如果条件总是为真,为什么还要使用enable_if?(我猜在您的真实代码中不是这样,但我只是想确定:)
发布于 2011-09-29 20:57:07
问题只在于完全特殊化的语法。它应该是:
template <> bool foo<bool>() { return true; }
^^^^^^https://stackoverflow.com/questions/7597474
复制相似问题