Я искал стандартный текст проекта 2015 года и не обнаружил появления FENV_ACCESS. http://cppreference.com также не имеет ничего об этом.
Однако http://cplusplus.com упоминает его (так как это не в стандарте, я думаю, мы должны предположить, что это консультативная информация в лучшем случае):
http://www.cplusplus.com/reference/cfenv/FENV_ACCESS/
Цитирование из cplusplus.com: (курсив мой)
Если установлено значение «включено», программа сообщает компилятору, что он может обращаться к среде с плавающей точкой, чтобы проверить свои флаги состояния (исключения) или работать в режимах управления, отличных от режима по умолчанию.
Если установлено значение «выключено», компилятор может выполнить определенные оптимизации, которые могут подорвать эти тесты и изменения режима, и, таким образом, получить доступ к среде с плавающей запятой в случаях, описанных выше, вызывает неопределенное поведение.
Независимо от того, включено или выключено состояние этой прагмы, зависит от настроек компилятора и реализации библиотеки.
Учитывая неудовлетворительное отсутствие ясности, я хотел бы избежать его использования, если это вообще возможно.
Как всегда, если использование было неизбежным, я бы хотел инкапсулировать его в один класс, который я могу специализировать и тестировать для каждой архитектуры.
И затем документируйте существование этого класса и проблемы, которые могут возникнуть при обновлении реализации компилятора, среды или библиотеки.
Update:
Существует очень краткое упоминание о заголовке в C++ стандарт:
§ 26.3 с плавающей точкой среды [cfenv]
...
2 Заголовок определяет все функции, типы и макросы так же, как и в пункте 7.6 стандарта C.
Update:
Дополнительная информация здесь: http://en.cppreference.com/w/cpp/preprocessor/impl
Мое чтение этого является то, что прагма определяется стандартом C11, а не стандартный С ++ 11. Поэтому использование в программе C++ строго выполняется/не определено.
Это потребует свертывания ваших рукавов и записи и отправки патча для LLVM. Приятно, когда открытый исходный код позволяет исправить эти вещи. –
@ HansPassant Что вы имеете в виду? Как патч для LLVM может решить проблему в стандарте? – Ruslan