оценка метапрограммирования шаблона

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

7
задан ildjarn 25 May 2012 в 00:55
поделиться