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