Почему конструктор структуры шаблона не может быть использован, если он объявлен внутри класса?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему конструктор структуры шаблона не может быть использован, если он объявлен внутри класса?

Сообщение Anonymous »

Я хочу инициировать массив 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»