ここがきびC MinGW part2 左のtemplate引数を右のtemplate引数に渡せない!

studiokingyo2004-09-05

さて、タイトルどおりなのですが、
どうだろうか、以下のコードはMinGWに通らない。
何故?何故?

template<class K,class V,class MAP_TYPE=std::map<K,V> >
struct map_ex : public map_ex_adapter<MAP_TYPE>{
typedef map_ex<K,V,MAP_TYPE> self_type;
typedef map_ex_adapter<MAP_TYPE> base_type ;
typedef MAP_TYPE CONTAINER_TYPE;
typedef typename base_type::DATA_TYPE DATA_TYPE;
typedef typename base_type::RESULT RESULT;
//typedef std::pair<bool,void *> GET_DATA;
typedef typename base_type::iterator iterator;
typedef typename base_type::const_iterator const_iterator;
typedef typename base_type::reverse_iterator reverse_iterator;
typedef typename base_type::const_reverse_iterator const_reverse_iterator;
/// キーの型
typedef typename base_type::key_type key_type;
///データの型
typedef typename base_type::mapped_type mapped_type;
/// キーとデータのペア
typedef typename base_type::value_type value_type;

//コンストラクタとかなくても大丈夫だよね・・・。(謎

};

とりあえず、キモはココだ。

template<class K,class V,class MAP_TYPE=std::map<K,V> >
struct map_ex : public map_ex_adapter<MAP_TYPE>{

しかし、この中身コンテナとっかえひっかえのデフォルトの指定だけはVCユーザーとして譲れないのである。
やっぱりマイナーなifdefに頼るしかなさそうで。゜(゜´Д`゜)゜。


#ifdef _MSC_VER
template<class K,class V,class MAP_TYPE=std::map<K,V> >
struct map_ex : public map_ex_adapter<MAP_TYPE>{
//typedef std::map<K,V> MAP_TYPE;
typedef map_ex<K,V,MAP_TYPE> self_type;
#else
template<class K,class V>
struct map_ex : public map_ex_adapter<std::map<K,V> >{
typedef std::map<K,V> MAP_TYPE;
typedef map_ex<K,V> self_type;
#endif


typedef map_ex_adapter<MAP_TYPE> base_type ;

typedef MAP_TYPE CONTAINER_TYPE;


typedef typename base_type::DATA_TYPE DATA_TYPE;
typedef typename base_type::RESULT RESULT;
//typedef std::pair<bool,void *> GET_DATA;
typedef typename base_type::iterator iterator;
typedef typename base_type::const_iterator const_iterator;
typedef typename base_type::reverse_iterator reverse_iterator;
typedef typename base_type::const_reverse_iterator const_reverse_iterator;
/// キーの型
typedef typename base_type::key_type key_type;
///データの型
typedef typename base_type::mapped_type mapped_type;
/// キーとデータのペア
typedef typename base_type::value_type value_type;

//コンストラクタとかなくても大丈夫だよね・・・。(謎

};

こうすると、IDE側がクラス参照ツリーとか作るとき上手く生成してくれないんだよねぇ〜。(´Д⊂グスン

何か上手い方法求む m(_ _)m