请考虑以下代码:
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。
答案 0 :(得分:7)
我认为它与某种方式有关,因为Visual C ++在那一点上不知道指向成员的指针的大小。例如,检查this缺陷报告(here是指向成员变量的指针的另一个问题)。我认为您发现了另外一个Visual C ++错误,应该将其报告给connect.microsoft.com。
答案 1 :(得分:1)
这是bug
答案 2 :(得分:0)
在我的情况下,我可以使用模板函数i.s.o来解决它。模板类:
template< typename Class > struct CMemberDumper {
Class& object;
template< typename M > void visit_member( M C::*pm ) {
std::cout << object.*pm;
}
};