0

考虑一下:

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。

4

1 回答 1

2

正如评论中所指出的,你有一个typename不应该出现的地方:

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

应该只是:

typedef int VectorType::value_type::* MMM;

typename当您a::b在模板内部时使用,a取决于模板参数并且b是一种类型。在这种情况下,您必须使用typename a::b将此事实传达给编译器。

另一方面,you're doing a::b::*,这是一个明确的指标,b必须是一个类型,所以typename不能在这里使用。

于 2013-10-09T09:32:58.573 回答