这个noexcept声明是否有效?

问题描述 投票:2回答:1
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中的一个错误,而不是其他的一个功能。那是对的吗?

c++ visual-c++ g++ clang++
1个回答
4
投票

你的评估是correct

在类成员规范中,该类在函数体,默认参数,noexcept-specifiers和默认成员初始化器(包括嵌套类中的这类事物)中被视为完整。否则,它在其自己的类成员规范中被视为不完整。

在完整类型的范围内,g应该找到unqualified name lookup

© www.soinside.com 2019 - 2024. All rights reserved.