GCC 模板:预期 »(« 在 »>« 标记之前
GCC Templates: expected »(« before »>« token
我不明白为什么以下代码无法编译:
template< typename TypeArg >
class Data
{
public:
struct Selector1
{
};
template< typename Selector >
void foo()
{
}
};
template< typename TypeArg >
class Test
{
public:
void test();
};
template< typename TypeArg >
void Test< TypeArg >::test()
{
Data< TypeArg > data;
data.foo< typename Data< TypeArg >::Selector1 >();
}
我已经用 GCC 4.6 和 GCC 4.9 测试过了。两者都给我同样的错误:
test.cpp: In member function »void Test::test()«:
test.cpp:28:51: Error: expected »(« before »>« token
test.cpp:28:53: Error: expected primary-expression before »)« token
有人可以告诉我编译代码需要做什么吗?
由于data
的类型是依赖的,data.foo
的性质未知,需要消歧:
data.template foo<typename Data< TypeArg >::Selector1>();
// ^^^^^^^^
我不明白为什么以下代码无法编译:
template< typename TypeArg >
class Data
{
public:
struct Selector1
{
};
template< typename Selector >
void foo()
{
}
};
template< typename TypeArg >
class Test
{
public:
void test();
};
template< typename TypeArg >
void Test< TypeArg >::test()
{
Data< TypeArg > data;
data.foo< typename Data< TypeArg >::Selector1 >();
}
我已经用 GCC 4.6 和 GCC 4.9 测试过了。两者都给我同样的错误:
test.cpp: In member function »void Test::test()«: test.cpp:28:51: Error: expected »(« before »>« token test.cpp:28:53: Error: expected primary-expression before »)« token
有人可以告诉我编译代码需要做什么吗?
由于data
的类型是依赖的,data.foo
的性质未知,需要消歧:
data.template foo<typename Data< TypeArg >::Selector1>();
// ^^^^^^^^