此声明是否有效

Is this noexcept declaration valid?

本文关键字:有效 是否 声明      更新时间:2023-10-16
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 中的一个错误,而不是其他功能。这是对的吗?

您的评估是正确的

在类成员规范中,类在函数体、默认参数、noexcept-speciators 和默认成员初始值设定项(包括嵌套类中的此类内容(中被视为完整的。否则,它在其自己的类成员规范中被视为不完整。

在完整类型的范围内,应通过非限定名称查找找到g