此代碼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