gpt4 book ai didi

c++ - enable_if 的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 02:29:00 25 4
gpt4 key购买 nike

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

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

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

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

关于c++ - enable_if 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40066350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com