С++ 17 делает noexcept
частью типа функции. Он также позволяет неявное преобразование из указателей функций noexcept
в потенциально бросающие указатели функций.
void (*ptr_to_noexcept)() noexcept = nullptr;
void (*ptr_to_throwing)() = ptr_to_noexcept; // implicit conversion
http://eel.is/c++draft/expr.static.cast#7 говорит, что static_cast
может выполнить обратное преобразование.
void (*noexcept_again)() noexcept = static_cast<void(*)() noexcept>(ptr_to_throwing);
К сожалению, и GCC, и Clang говорят мне иначе: https://godbolt.org/z/TgrL7q
Как правильно это сделать? Являются ли reinterpret_cast
и стиль C моими единственными вариантами?