Итак, у меня есть класс шаблона, который я хотел бы принять std::map, где тип данных является либо необработанным указателем, либо std::unique_ptr. Затем в этом классе я хотел бы получить тип базового указателя:
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_ преуспеет. Должен ли я идти об этом по-другому?