Ниже приведена выдержка из реализации карты против версии 2010, эта функция-член определена в родительском классе _Tree, который находится в файле xtree.
template<class _Valty>
typename _STD tr1::enable_if<!_STD tr1::is_same<const_iterator,
typename _STD tr1::remove_reference<_Valty>::type>::value,
iterator>::type
insert(const_iterator _Where,
_Valty&& _Val)
{ // try to insert node with value _Val using _Where as a hint
return (_Insert(_Where,
this->_Buynode(_STD forward<_Valty>(_Val))));
}
На самом деле, эта функция вставка итератора (позиция итератора, const value_type & x) , интересной ее частью является тип возврата ! Что это значит? Из того, что я понимаю, это отключает создание экземпляров шаблона, если value_type (т.е. _Valty ) совпадает с const_iterator .
Но в таком случае, поскольку не существует неявного преобразования из const_iterator в value_type , это выглядит как избыточное.
Я верю, что у меня есть нечто, чего я не понимаю, что это? что запрещает шаблон возвращаемого типа?