enable_if的奇怪行为

strange behavior of enable_if

本文关键字:if enable      更新时间:2023-10-16

有人知道为什么下面的代码可以编译吗

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要求失败的替换依赖于模板参数。

如果替换失败发生在查找的第一阶段(换句话说,当它不依赖于模板参数时),则程序是病态的,不需要诊断。但是在这种情况下,流行的编译器会产生一个可读错误。

否则,编译器必须等待模板专门化的实例化才能知道是否可以进行替换。如果不能,语言要求它不产生硬错误,而是被静默地忽略。