Следующее, похоже, компилируется на пару компиляторов, которые я пробовал:
class A
{
public:
virtual void foo() throw() = 0;
};
class B : public A
{
public:
virtual void foo() noexcept override { }
};
Кажется, что можно переопределить функцию throw() с новой спецификацией noexcept. Я также пробовал наоборот (переопределяя noexcept с throw()), и, похоже, он работает. Почему это? Это поведение undefined или это разрешено?
Обратите внимание, что на генерацию кода влияет noexcept vs throw(). Они также не имеют эквивалентного поведения, поскольку noexcept вызывает другую функцию завершения, чем throw(). Идеальный ответ вызовет различия в поведении и почему они делают или не имеют значения в этом случае.