Рассмотрим следующий пример, который я откопал здесь, в StackOverflow.
template<typename T, typename Pred>
T const & clamp ( T const& val,
typename boost::mpl::identity<T>::type const & lo,
typename boost::mpl::identity<T>::type const & hi, Pred p )
{
// assert ( !p ( hi, lo )); // Can't assert p ( lo, hi ) b/c they might be equal
return p ( val, lo ) ? lo : p ( hi, val ) ? hi : val;
}
где typename boost::mpl::identity<T>::type
не позволяет компилятору вывести T на основе типа второго и третьего аргумента. Это очень удобно для меня, но я не могу использовать Boost Library
(пожалуйста, не ругайте меня из-за этого, так как из-за этого уже тяжело).
Теперь вопрос в том, есть ли что-то эквивалентное в стандартной библиотеке, чего я просто не могу найти?