首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在仅具有模板化返回类型的函数模板中混合使用模板专门化和enable_if

在仅具有模板化返回类型的函数模板中混合使用模板专门化和enable_if
EN

Stack Overflow用户
提问于 2011-09-29 20:41:12
回答 2查看 564关注 0票数 1

我有以下代码无法在VC2010上编译:

代码语言:javascript
复制
#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函数模板和显式模板专门化?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-29 20:57:15

函数模板专门化(谢天谢地!)不需要返回与非专门化模板相同的类型,所以这里不是问题所在。

实际上,enable_if与您的错误无关,您的代码只是在专门化中缺少模板参数列表:

代码语言:javascript
复制
template <>
bool foo<bool>()
{ return true; }

顺便说一句,如果条件总是为真,为什么还要使用enable_if?(我猜在您的真实代码中不是这样,但我只是想确定:)

票数 2
EN

Stack Overflow用户

发布于 2011-09-29 20:57:07

问题只在于完全特殊化的语法。它应该是:

代码语言:javascript
复制
template <> bool foo<bool>() { return true; }
                    ^^^^^^
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7597474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档