Инициализатор элемента по умолчанию (= 5;
в вашем коде) определяет только то, как элемент данных c, не относящийся к состоянию, инициализируется по умолчанию . Конструктор может дать ему другое значение. Таким образом, компилятор не может знать , каким будет его значение во время компиляции.
И, следовательно, вы не можете использовать A::size
в выражении константы во время компиляции. Например, когда вы объявляете размер массива.
Если вы хотите, чтобы у каждого A
было size
из 5, тогда переменная должна быть constexpr static
членом. Или, как предлагается в комментарии, a std::array<..., 5>
.