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