指向typename成员的指针

时间:2013-10-09 09:00:40

标签: c++ templates typename pointer-to-member gcc4.7

考虑一下:

template < typename VectorType >
void ff()
{
    // This passes.
    typedef typename VectorType::value_type VV;
    typedef int VV::* MM;

    // This FAILS!??
    typedef int typename VectorType::value_type::* MMM;
}

为什么第二个失败以及在一个typedef语句中获取所需typedef的正确方法是什么?

我的编译器是GCC-4.7.2。

1 个答案:

答案 0 :(得分:2)

正如评论中所指出的那样,你有一个typename,它不应该是:

typedef int typename VectorType::value_type::* MMM;

应该只是:

typedef int VectorType::value_type::* MMM;
如果您在模板中typenamea::b取决于模板参数且a是一种类型,则会使用

b。在这种情况下,您必须使用typename a::b将此事实传达给编译器。

另一方面,您正在执行a::b::*,这是b必须是类型的明确指标,因此此处无法使用typename