C11, 6.6.10: IB: другие формы константных выражений: требуется дополнительная документация о соответствии
Почему (кажется, что это) обычная практика для поставщиков компиляторов C не предоставлять конечным пользователям дополнительную документацию по соответствию о поведении, определяемом реализацией, в отношении "других форм константных выражений" (C11, 6.6.10)?
C11, 6.6.10:
Реализация может принимать другие формы константных выражений.
Этот факт приводит к следующим реакциям / отзывам (взятым из разных источников):
SO пользователь MM:
Поставщик компилятора должен опубликовать соответствующую документацию со списком выражений, которые он принимает как константы, хотя я не смог найти эту документацию для MSVC. (оставьте комментарий, если можете!)
SO пользователь Кейт Томпсон:
По общему признанию, стандарт, похоже, не требует такой документации (что меня немного удивляет).
Источник: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66618 (2015-07-01 00:48:48 UTC)
Поскольку 6.6.10
связан с поведением, определяемым реализацией, и поскольку "каждая реализация должна включать документацию, описывающую ее характеристики и поведение" (стандарт C++, раздел 1.9), почему это не является общей практикой в случае 6.6.10
? Если кто-то здесь представляет какого-либо (промышленного) поставщика компилятора C, просьба указать причину / прокомментировать ситуацию.
PS Причина вопроса - возможные проблемы переносимости, связанные с "другими формами константных выражений". Будет значительно сэкономлено время, если конечные пользователи будут точно знать, какие "другие формы константных выражений" "принимаются реализацией" до написания кода (а не после того, как они будут удивлены проблемами переносимости).
UPD. Примечание о "При использовании поведения, определяемого реализацией, я предполагаю проблемы с переносимостью, пока не будет доказано обратное". Если программный продукт планируется переносить между N компиляторами и все N компиляторов поддерживают одну и ту же языковую функцию, связанную с IB, которая полезна при написании кода, но учитывает поведение, определяемое реализацией, то почему бы не использовать ее? Единственный вопрос в том, что нам нужно заранее знать, что эта функция языка, связанная с IB, поддерживается всеми N компиляторами. (Да, мы можем найти его эмпирическим / экспериментальным путем, но в случае наличия многих языковых функций, связанных с IB, это, вероятно, займет много времени. Лучше получить официальное заявление от поставщика компилятора о том, что эта функция языка, связанная с IB, поддерживается / не поддерживается.)