3

这个问题相关,我想在我的公共界面之后指定我的私人部分。

template<class T, void (T::*f)()>
class B
{
public:
    void g(int y) noexcept(noexcept(x.*f()))
    {}
private:
    T& x;
};

但是我从 Clang 得到一个错误,即 x 是一个未声明的标识符。

mm_test.cpp:14:34: error: use of undeclared identifier 'x'
    void g(int y) noexcept(noexcept(x.*f()))
                                    ^

如果成员 x 的声明发生在 g 的声明之前,它编译得很好。我不应该能够在类定义中的 noexcept 运算符中使用成员变量而不是其声明吗?如果不是,我如何在不提前声明 x 的情况下实现等效的 noexcept 说明符?

4

0 回答 0