gpt4 book ai didi

C++11 静态断言在使用 Clang++ 的 noexcept 检查失败?

转载 作者:行者123 更新时间:2023-12-04 21:15:15 25 4
gpt4 key购买 nike

我正在尝试使用 clang++ -std=c++11 -c 编译以下代码它失败了:

void g() noexcept {}

template <typename Func>
void f(Func && func) noexcept(noexcept(func()))
{ static_assert(noexcept(func()), "func()"); } // No error!

void h() { f(&g); } // No error!

static_assert(noexcept(f(&g)), "Error!");

Clang 3.4.2 给我的错误消息是:
test.h:9:1: error: static_assert failed "Error!"
static_assert(noexcept(f(&g)), "Error!");
^ ~~~~~~~~~~~~~~~

我在这里缺少什么?

最佳答案

noexcept不是函数类型的一部分。

因此,&g只是您对 void(*)() 类型的工厂表达式的运行, 无特殊 noexcept权力。 g也是如此,因为它衰减到函数指针。当最终调用这样的函数指针时,它没有noexcept规范,因此整个表达式不是 noexcept .

关于C++11 静态断言在使用 Clang++ 的 noexcept 检查失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25376820/

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