Ответ 1
Поскольку функции исходят из C, они не могут быть перегружены, что означает два разных имени для функций, которые делают то же самое, но имеют разные параметры (-type). Вот оригинальные подписи:
float nextafter(float, float);
float nexttoward(float, long double);
И теперь стандарт просто говорит, что должно быть несколько перегрузок, чтобы сделать все лучше на С++ (§26.8 [c.math] p11
):
Кроме того, должны быть дополнительные перегрузки, достаточные для обеспечения:
- Если какой-либо аргумент, соответствующий параметру
double
, имеет типlong double,
, тогда все аргументы, соответствующие параметрамdouble
, эффективно отображаются вlong double
.- В противном случае, если любой аргумент, соответствующий параметру
double
, имеет типdouble
или целочисленный тип, тогда все аргументы, соответствующие параметрамdouble
, эффективно передаются вdouble
.- В противном случае все аргументы, соответствующие параметрам
double
, эффективно передаются вfloat
.См. также: ISO C 7.5, 7.10.2, 7.10.6.