此代码unexplicably不编译:C++函数模板参数与模板化型结构愁楚
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 http://ideone.com/N8dQoj(完全是问题的代码) – leemes