#c #visual-c #g #clang
#c #visual-c #g #clang
Вопрос:
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:
Ваша оценка верна
В спецификации члена класса класс считается завершенным в телах функций, аргументах по умолчанию, спецификаторах noexcept и инициализаторах членов по умолчанию (включая такие вещи во вложенных классах). В противном случае оно считается неполным в пределах его собственной спецификации члена класса.
В области полного типа g
должно быть найдено с помощью неквалифицированного поиска имени.