【发布时间】:2013-01-22 05:38:49
【问题描述】:
这段代码莫名其妙地无法编译:
struct sometype
{
template <typename T>
T* get() { return nullptr; }
};
template <typename T>
struct anothertype
{
#if 1
template <typename T2> struct some_wrapper { typedef T2 type; };
typedef typename some_wrapper<sometype>::type thetype;
#else
typedef sometype thetype;
#endif
typedef thetype* Ptr;
Ptr m_ptr;
T* get() { return m_ptr->get<T>(); }
};
如果我将 #if 参数更改为 0,它会以某种方式修复。有人可以对此有所了解吗?请注意,显然毫无意义的 some_wrapper 事情实际上在我的真实代码中做了一些有用的事情。
我用的是g++ 4.7.1和-fstd=gnu++11,报错如下(指向我声明anothertype<T>::get的那一行:
error: expected primary-expression before '>' token
error: expected primary-expression before ')' token
【问题讨论】:
-
如果您运行通过编译器发布的代码,您会收到该错误吗?
-
@DavidRodríguez-dribeas ideone.com/N8dQoj(正是问题中的代码)
标签: c++ function templates c++11 arguments