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

我认为这与 Visual C++ 在某种程度上不知道指向成员的指针的大小有关。例如检查这个缺陷报告(这里是指向成员变量的另一个问题)。我认为您又发现了一个 Visual C++ 错误,应该向 connect.microsoft.com 报告。

于 2009-11-26T08:48:18.463 回答
1

这是一个错误

于 2009-12-01T09:29:56.533 回答
0

I stumbled upon the same problem. The support for pointer-to-member template arguments is still limited in VC++ (see bug report).

In my case I could work around it by using a template function i.s.o. a template class:

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 回答