【发布时间】:2015-05-21 17:41:36
【问题描述】:
我显然没有足够的 SFINAE 经验来处理这个问题。实际上我的印象是它直到现在都有效,并且这种问题开始出现在最近半小时,在我的代码中无处不在。
#include <iostream>
using namespace std;
template <unsigned int N, typename = typename enable_if <N >= 100> :: type>
struct more_than_99
{
};
int main()
{
more_than_99 <0> c;
}
它说
No type named 'type' in 'std::__1::enable_if<false, void>'; 'enable_if' cannot be used to disable this declaration
在模板声明对应的行上。到底是怎么回事?我一直使用这种语法来启用和禁用我的模板类,并且它总是在实例化行而不是在声明行上抛出错误..
能否请你迂腐解释一下我在这里做错了什么?
【问题讨论】:
-
enable_if通常不用于禁用类类型。你想在这里完成什么?more_than_99<500>似乎工作正常。 -
我需要在尝试实例化类似 `more_than_99 x;' 的东西时抛出一个错误在我尝试实例化它的那一行。类似于“嘿,这种类型不存在”。
-
@MatteoMonti 这就是它的意思。由于
bool为假,因此没有定义T。 -
但是……难道没有办法在声明的那一行说吗?
-
错误消息指向声明(对于上下文)和实例化(对于 this 类型无效,它可能对其他类型有效)。但我很确定错误消息取决于编译器。