colorname
@colorname

Почему MSVC выдает ошибку что размер массива должен быть константным выражением, а Clang/GCC компилирует без ошибок?

#include <iostream>

constexpr int new_sz()
{
	return 42;
}

constexpr size_t scale(size_t count)
{
	return new_sz() * count;
}

int main()
{
	int value = 12;
	int arr[scale(value)]; // ?????????????

	return 0;
}


функция scale вернет константное выражение если ее аргумент также является константным выражением. В данном случае value не является константой и функция scale не возвращает константное выражение по сути. MSVC ругается на то что размер массива не может быть неконстантным выражением.
Но почему Clang или GCC все нормально компилируют и не обращают на это внимание?
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
value тоже должна быть constexpr

Без constexpr срабатывает как раз VLA, о котором пишет Александр Ананьев
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
VLA (variable length of arrays) не входит в стандарт c++, но реализовано компиляторами gcc/clang.
Msvc не обязан поддерживать, то что не входит в стандарт.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы