Является ли это объявление без исключения действительным? - PullRequest
2 голосов
/ 14 апреля 2019
struct X
{
    void f() noexcept(noexcept(g()));
    void g() noexcept;
};

В vc ++ и clang это работает, но gcc жалуется:

source_file.cpp:6:34: error: ‘g’ was not declared in this scope
     void f() noexcept(noexcept(g()));
                                  ^

Я думаю, что это ошибка в gcc, а не функция в других.Это правильно?

1 Ответ

4 голосов
/ 14 апреля 2019

Ваша оценка правильная

В спецификации члена класса класс считается завершенным в теле функций, аргументах по умолчанию, спецификаторах noexcept и инициализаторах членов по умолчанию(включая такие вещи во вложенных классах).В противном случае он считается неполным в собственной спецификации члена класса.

В области полного типа g должен быть найден при поиске безоговорочного имени .

...