Почему стандарт С++ не упоминает __STDC_IEC_559__?

Согласно стандарту С++ 11 [c.math], заголовок <cmath> совпадает с заголовком библиотеки стандартного C <math.h>.
(Конечно, есть несколько отличий, --- пространство имен, перегрузки и т.д., Но здесь их можно игнорировать.)
И согласно стандарту приложения C99 F: "Реализация, которая определяет __STDC_IEC_559__, должна соответствовать спецификациям в" приложении F.

Ex. atan2 может вызвать ошибку домена, если оба аргумента равны нулю, но не должны, если определено __STDC_IEC_559__.

В C99 многие поведение также зависит от того, определена ли __STDC_IEC_559__ или нет.

Однако, похоже, что __STDC_IEC_559__ не упоминается нигде в стандарте С++ 11.
Если да, то реализация С++ соответствует спецификациям в приложении F?

Я думаю, что std::numeric_limits<T>::is_iec559() является заменой, но, похоже, упоминается только тип.

Ответ 1

Стандарт С++ (n3797) включает стандартную библиотеку C по ссылке, см. s1.2/2.

Библиотека, описанная в разделе 7 ИСО/МЭК 9899: 1999 и 7 раздела ИСО/МЭК 9899: 1999/Cor.1: 2001 и раздел 7 ISO/IEC 9899: 1999/Cor.2: 2003 в дальнейшем именуется стандартной библиотекой C.

С квалификацией, отмеченной в статьях с 18 по 30 и на C.4, стандартная библиотека C является подмножеством стандарта С++ библиотека.

В стандарте нет упоминания об этом символе, и я бы не ожидал, что он будет определен, поскольку он, как представляется, специфичен для стандарта C. Не определяя этот символ, С++ не связан содержимым Приложения F.

Вместо этого стандарт С++ содержит множественные упоминания IEC 559 в более похожей на С++ форме. Например,

Должна быть верна для всех специализаций, в которых is_iec559 != false

В 18.3.2.4/56 упоминается конкретное упоминание.

static constexpr bool is_iec559;

Истина в том и только в том случае, если тип придерживается стандарта IEC 559.

Значение для всех типов с плавающей запятой.

Я думаю, было бы справедливо сказать, что С++ включает в себя все те же возможности (или их отсутствие), но адаптированные к миру С++.