Рассмотрим следующий фрагмент кода:
struct foo {
static constexpr const void* ptr = reinterpret_cast<const void*>(0x1);
};
auto main() -> int {
return 0;
}
Вышеприведенный пример компилируется в g++ v4.9 (Live Demo), в то время как он не компилируется в clang v3.4 (Live Demo) и генерирует следующую ошибку:
error: constexpr variable 'ptr' должна быть инициализирована константным выражением
Вопросы:
-
Какой из двух компиляторов прав в соответствии со стандартом?
-
Каков правильный способ объявления выражения такого рода?