This just feels important to point out because this feature is 15 years old and still commonly misunderstood, and each time people are wanting the same thing (actual compile-time prevention of `throw`) which it is not.
Edit: OK I finally just went and tried it on godbolt.org. C++17 GCC, Clang, and MSVC all give 1 warning on this code for `bar` and that's all.
void canthrow() {
throw 42;
}
void foo() noexcept {
canthrow();
}
void bar() noexcept {
throw 42;
}https://godbolt.org/z/rjPfYjnzf
https://godbolt.org/z/14ocshsE5
I filed bugs against both GCC and LLVM requesting warnings:
It would also help if the APC docs documented that APCs must not throw.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118263
https://github.com/llvm/llvm-project/issues/121427
Perhaps the C++ standards committee should specify that doing this should cause a compiler failure, rather than a warning.