gpt4 book ai didi

c++ - 为什么使用enable_if时is_same编译失败,但is_same_v通过

转载 作者:行者123 更新时间:2023-12-02 01:24:54 28 4
gpt4 key购买 nike

环境

x86-64 gcc 12.2,您可以在https://godbolt.org/z/eTvTf7n3n处尝试和 https://godbolt.org/z/4W7hM3Pzs

代码

#include <type_traits>

// pass
template<std::enable_if_t<!std::is_same_v<int, int>, bool> = 0>
void f1(){
}

// Compilation failed
template<std::enable_if_t<!std::is_same<int, int>::value, bool> = 0>
void f2(){
}


int main()
{
}

问题

为什么函数 f1f2 的行为不同? is_same_v 只是 is_same::value 的常量时间包装器,我不明白是什么造成了差异。

最佳答案

该代码的 NDR 格式不正确1。这两个重载都被 Clang 和 MSVC 拒绝。

<强> [temp.res.general]/6.1

The validity of a template may be checked prior to any instantiation. ... The program is ill-formed, no diagnostic required, if:

— no valid specialization can be generated for a template ... and the template is not instantiated, ...


1 NDR =“不需要诊断”,意味着程序无效,但编译器不需要捕获它(不需要发出错误/警告消息,又名“诊断” )。

关于c++ - 为什么使用enable_if时is_same编译失败,但is_same_v通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74974160/

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