Атрибут [[noreturn]]
может применяться к функциям, которые не предназначены для возврата. Например:
[[noreturn]] void will_throw() { throw std::runtime_error("bad, bad, bad ...."); }
Но я столкнулся со следующей ситуацией (нет, я не проектировал это):
class B {
public:
virtual void f() { throw std::runtime_error(""); }
};
class D : public B {
void f() override { std::cout << "Hi" << std::endl; }
};
Мне бы хотелось разместить атрибут [[noreturn]]
в объявлении B::f()
. Но я не понимаю, что происходит с переопределением в производном классе. Успешное возвращение из функции [[noreturn]]
приводит к поведению undefined, и я, конечно, не хочу, чтобы это переопределение также наследовало атрибут.
Вопрос: Переопределяя [[noreturn] virtual void B::f()
, наследую ли атрибут [[noreturn]]
?
Я просмотрел стандарт С++ 14, и у меня возникли проблемы с определением того, наследуются ли атрибуты.