在第一段cppreference.com中明确指出throw(T1, ..., Tn)
在 C++17 中已删除。
让我感到困惑的是,一些编译器支持throw(T1, ..., Tn)
C++17 模式(参见演示)。
- MSVC 默认支持它,但您可以为其打开警告,请参阅C5040。它可以变成一个错误
/we5040
。 - 默认情况下,Clang 将其报告为错误,但可以使用
-Wno-dynamic-exception-spec
. - GCC 让您别无选择:这是一个错误。
是否允许编译器支持标准中删除的功能?出于什么目的?
或者这只是一个编译器扩展,就像void foo(int size) { char a[size]; }
在 GCC 中一样,请参阅demo。