Cosider в следующем примере я выкопал здесь, на 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
(пожалуйста, не беспокойте меня об этом, потому что это уже трудное время из-за этого).
Вопрос теперь в том, что прямо в стандартной библиотеке что-то эквивалентное, чего я просто не могу найти?