したがって、データ型がrawポインターまたはstd::unique_ptrのいずれかであるstd::mapを受け入れたいテンプレートクラスがあります。次に、このクラスで、基になるポインターのタイプを取得したいと思います。
typedef typename boost::mpl::if_<
boost::is_pointer<typename Container::mapped_type>,
typename Container::mapped_type,
typename Container::mapped_type::element_type*
>::type data_type
ただし、生のポインタ型のマップを使用してクラスをインスタンス化すると、次のエラーが発生します。
error: 'std::map<int, ValueType*>::mapped_type {aka ValueType*}' is not a class, struct, or union type
生のポインタで評価しているようにtypename Container::mapped_type::element_type*
思えますが、テンプレートメタプログラミングでは、if_が成功したときにそれを評価しないと思いました。これについては別の方法で行う必要がありますか?