8

次のコードを検討してください。

template<class T, class F>           struct X {};
template<class T, class F, T F::* m> struct Y {};

struct Foo {
    int member;
    typedef X<int, Foo>               x_type; // works well
    typedef Y<int, Foo, &Foo::member> y_type; // ERROR
};

typedef Y<int, Foo, &Foo::member> y_type2; // OK

コンパイラがエラーを生成するのはなぜですか?(VS2008)


新しい

このバグをconnect.microsoft.comに投稿しました。

4

3 に答える 3

7

VisualC++がその時点でメンバーへのポインタのサイズを知らないこととどういうわけか関係があると思います。たとえば、この欠陥レポートを確認してください(メンバー変数へのポインタに関する別の問題があります)。Visual C ++のバグがもう1つ見つかったので、connect.microsoft.comに報告する必要があると思います。

于 2009-11-26T08:48:18.463 に答える
1

これはバグです

于 2009-12-01T09:29:56.533 に答える
0

私は同じ問題に遭遇しました。メンバーへのポインタテンプレート引数のサポートは、VC ++ではまだ制限されています(バグレポートを参照)。

私の場合、テンプレート関数isoテンプレートクラスを使用して回避できます。

template< typename Class > struct CMemberDumper {
    Class& object;
    template< typename M > void visit_member( M C::*pm ) {
       std::cout << object.*pm;
    }
};
于 2009-11-26T09:05:42.890 に答える