I see with any recent GCC (when targeting the Itanium C++ ABI),
$ cat test.cc #include <iostream> #include <typeinfo> void f() noexcept; int main() { std::cout << typeid(f).name() << '\n'; } $ g++ -std=c++17 test.cc $ ./a.out FvvE
that the function type's mangling doesn't contain the noexcept specifier (in which case it would be "DoFvvE").
Is that a deliberate decision in GCC, or does it just happen by accident (as for function pointer types, the Itanium ABI encodes noexcept specifiers at the __pointer_type_info, not at the underlying __function_type_info)?
I'm asking in the context of Clang patch <https://reviews.llvm.org/D40720> "No -fsanitize=function warning when calling noexcept function through non-noexcept pointer in C++17". Clang happens to produce type_info for the noexcept-annotated function type (with "DoFvvE" name) in the above example, and not doing so (and instead behaving like GCC does) would be one way to solve the issue I want to fix with that patch.