C++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 моими единственными вариантами?
static_cast
и просто спросил: «Как я могу разыграть это? В чем опасность?». - person Davis Herring   schedule 22.08.2019const_cast
, где исходный объект объявлен неconst
, или приведение от базы к производному, когда я знаю, что моя базовая ссылка на самом деле относится к производному объекту. Меня беспокоит только то, что этотnoexcept
состав также требует всего рискаreinterpret_cast
. - person Filipp   schedule 23.08.2019