Черты numeric_limits должны быть общим способом получения различной информации о типах, чтобы иметь возможность делать такие вещи, как
template<typename T>
T min(const std::vector<T>& vect)
{
T val = std::numeric_limits<T>::min();
for(int i=0 ; i<vect.size() ; i++)
val = max(T, vect[i]);
return val;
}
Проблема в том, что (по крайней мере, при использовании MS Visual Studio 2008) numeric_limits‹int›::min() возвращает наименьшее отрицательное число, а numeric_limits‹double›::min() возвращает наименьшее положительное число. !
Кто-нибудь знает, что стоит за этим дизайном? Есть ли лучший (рекомендуемый?) способ использования numeric_limits? В моей конкретной функции выше я, конечно, мог бы инициализировать T в vect[0], но это не тот ответ, который я ищу.
См. также обсуждение (для операций с плавающей запятой) здесь