Я не совсем уверен, но я думаю, что проблема в том, что в bin::abc
объект может быть чем угодно во время выполнения. Следовательно, bin::siz()
не может быть оценено во время компиляции.
Следующее работает отлично
int main()
{
bin b;
char arr[b.siz()];
}
после изменения bin
на:
class bin {
public:
constexpr int siz();
};
constexpr int bin::siz() {
return sizeof(int) * 8;
}
Если siz
не зависит от состояния объекта, как в опубликованном вами коде, я предлагаю сделать его static
функцией-членом.
У меня хорошо работает следующее.
class bin {
public:
static constexpr int siz();
void abc() const;
};
constexpr int bin::siz() {
return sizeof(int) * 8;
}
void bin::abc() const {
char arr[siz()];
}
int main()
{
bin b;
char arr[b.siz()];
}