Я хочу инициировать массив const, поэтому я написал struct: < /p>
class A {
template struct Make_0 {
long long z[N];
constexpr Make_0() : z() {
z[0] = 1;
for (int i = 1; i < N; i++) {
z = z * 10;
}
}
};
public:
static constexpr auto _z = Make_0();
static constexpr const long long *z = _z.z;
};
< /code>
Однако компилятор жаловался: < /p>
Constexpr variable '_z' must be initialized by a constant expression clang(constexpr_var_requires_const_init)
Undefined constructor 'Make_0' cannot be used in a constant expression
Я переместил make_0 за пределами , теперь он работает. Но почему? Я не вижу никакой разницы, так как -просто общий класс
Код работает:
template struct Make_0 {
long long z[N];
constexpr Make_0() : z() {
z[0] = 1;
for (int i = 1; i < N; i++) {
z = z * 10;
}
}
};
class A {
public:
static constexpr auto _z = Make_0();
static constexpr const long long *z = _z.z;
};
Подробнее здесь: https://stackoverflow.com/questions/794 ... ide-a-clas