Re[10]: constexpr - разочарование
От: N. I.  
Дата: 14.06.17 19:00
Оценка: 11 (3)
Дрободан Фрилич:

ДФ>Конкретный пример, один компилятор проверяет все ветки на соответствие constexpr-у, а другой только те что вычисляются.


По правилам C++11/14/17 невычисляющиеся подвыражения на константность всего выражения не влияют:

С++11:

A conditional-expression is a core constant expression unless it involves one of the following as a potentially evaluated subexpression (3.2), but subexpressions of logical AND (5.14), logical OR (5.15), and conditional (5.16) operations that are not evaluated are not considered [ Note: An overloaded operator invokes a function.—end note ]:


C++14/17:

A conditional-expression e is a core constant expression unless the evaluation of e, following the rules of the abstract machine (1.9), would evaluate one of the following expressions:


Формулировка касательно игнорирования невычисляющихся подвыражений появилась в 4-й ревизии proposal-а по Generalized Constant Expressions N2116 (2006 г.) и вошла в черновик C++0x N2369 в 2007-ом году. Соответственно, компиляторы, которые этому правилу не следуют, либо какие-то реально олдскульные, либо просто забагованные по данной части.
Отредактировано 14.06.2017 19:40 N. I. . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.