Следующий фрагмент отлично работает в Clang 3.5, но не в GCC 4.9.2:
int main()
{
constexpr volatile int i = 5;
}
с ошибкой:
Ошибка: как "volatile", так и "constexpr" не могут использоваться здесь
Если я проверяю сборку, которую создает Clang, она показывает 5
, как ожидалось:
movl $5, -4(%rsp)
В GCC constexpr int i = 5
оптимизируется, но volatile int i = 5
также показывает 5
в сборке. volatile const int i = 5
компилируется в обоих компиляторах. Это не внешняя концепция для того, чтобы что-то было одновременно изменчивым и постоянным.
Какой компилятор корректен по стандартам?