このコードは不可解にコンパイルされません:
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>(); }
};
引数を 0に変更する#if
と、何とか修正されます。誰かがこれに光を当てることができますか? some_wrapper
一見無意味なことは、実際には私の実際のコードで何か役に立つことに注意してください。
私は g++ 4.7.1 を-fstd=gnu++11
で使用しています。エラーは次のとおりです (宣言する行を指していますanothertype<T>::get
:
error: expected primary-expression before '>' token
error: expected primary-expression before ')' token