与this question相关,我想在我的公共界面之后指定我的私人部分。
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说明符?