考虑一下:
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。
答案 0 :(得分:2)
正如评论中所指出的那样,你有一个typename
,它不应该是:
typedef int typename VectorType::value_type::* MMM;
应该只是:
typedef int VectorType::value_type::* MMM;
如果您在模板中typename
,a::b
取决于模板参数且a
是一种类型,则会使用 b
。在这种情况下,您必须使用typename a::b
将此事实传达给编译器。
另一方面,您正在执行a::b::*
,这是b
必须是类型的明确指标,因此此处无法使用typename
。