`noexcept(noexcept(expr))`

问题描述 投票:0回答:1

我在 MSVC 中看到一个编译错误:

constexpr auto f = 
    [](auto&& x, auto&&... someOtherStuff) noexcept(noexcept(x)) {};

这给了我

<source>(3): error C2760: syntax error: 'someOtherStuff' was unexpected here; expected ')'

当我改变周围的东西时,这不应该编译,但我收到内部编译器错误:

constexpr auto g = 
    [](auto&&... someOtherStuff) noexcept(noexcept(int)) {}; //< ICE

https://godbolt.org/z/faKKfjdPx

上面的

f
是正确的C++吗?它(和 ICE)会随着
/std:c++20
或其他编译器而消失。

c++ lambda
1个回答
0
投票

f
是正确的,但
g
不是:

noexcept
操作员:

语法

noexcept( expression )

int
不是一个表达式。

此外,如果不使用

/permissive-
进行编译,MSVC 会遵循自己的规则(通常与标准 C++ 规则相冲突)并且不会编译
f
。如果您添加
/permissive-
,错误就会消失。

© www.soinside.com 2019 - 2024. All rights reserved.