enable_if的奇怪行为
strange behavior of enable_if
有人知道为什么下面的代码可以编译吗
static const size_t CONSTANT = /* ... */;
template< size_t M = CONSTANT, typename std::enable_if_t< M!=1, size_t > = 0 >
res_type</*...*/> foo()
{
// ...
}
static const size_t CONSTANT = /* ... */;
template< typename std::enable_if_t< CONSTANT!=1, size_t > = 0 >
res_type</*...*/> foo()
{
// ...
}
提前感谢。
最好SFINAE要求失败的替换依赖于模板参数。
如果替换失败发生在查找的第一阶段(换句话说,当它不依赖于模板参数时),则程序是病态的,不需要诊断。但是在这种情况下,流行的编译器会产生一个可读错误。
否则,编译器必须等待模板专门化的实例化才能知道是否可以进行替换。如果不能,语言要求它不产生硬错误,而是被静默地忽略。
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 如何将enable-if与模板参数和参数包一起使用
- 无论条件是否为true,if总是在c++中执行
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何删除peer if else分支中的冗长句子
- 我似乎对if/else的基本语句有问题:/
- if数组上的随机数
- 将按位if条件转换为普通if条件
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 使用if-else将数字转换为单词
- 为什么简单的算术减法在"if"条件下不起作用?
- 检查一个类型是否直接派生自"enable if"上下文中的另一个类型(是其子类型)
- SFINAE with boost enable if