Ответ 1
С++ 11 был, когда были добавлены std::labs
и std::llabs
. Это было частью частичной синхронизации с стандартной библиотекой С++ со стандартной библиотекой C99.
В коде С++ это действительно не нужно, потому что у нас была перегрузка long
std::abs
с тех пор как навсегда. Но если у вас есть код C (который по совпадению также компилируется с помощью компилятора С++), и он использует labs
, вы можете создать его с помощью компилятора и стандартной библиотеки С++ 11.
В ретроспективе для этих функций существует один весьма полезный случай использования. И тогда попытка использования std::abs
неоднозначна. Например:
template<typename T>
T run_func(T (&f)(T)) {
return f({});
}
Тогда попытка вызова run_func(std::abs);
плохо сформирована. Нам нужно либо явно указать аргумент шаблона, либо применить std::abs
к соответствующему типу. С другой стороны, run_func(std::labs);
не является двусмысленным и не слишком подробным.
Тем не менее, не слишком полезно.