Open apolukhin opened 3 years ago
Andrey Davydov, 19 февраля 2019, 10:54 Во-первых, для типов с нетривиальными конструкторами важно, в какой момент они исполнятся, сейчас у пользователя есть возможность повлиять на это, а с Вашим предложением -- не будет.
Во-вторых, если принять такое правило, то весь старый код, где у static полей уже был definition, начнет нарушать ODR, не так ли?
Vyacheslav Meshkov, 25 февраля 2019, 20:03 Andrey Davydov, Мне тут сложно знать тонкости, потому что я не компиляторщик, и деталей не знаю. Могу лишь предположить, что вроде как сейчас оба варианта ниже уже допустимы, и проблем ODR не вызывают, верно?
1:
class A {
static int a = 10;
};
2:
class A {
static int a;
};
int A::a = 10;
Andrey Davydov, 25 февраля 2019, 21:50 Vyacheslav Meshkov, ну коли Вы не компиляторщик, так проверили бы компиляторами: https://gcc.godbolt.org/z/7J_20F. non-const static data member нельзя инициализировать inplace.
Vyacheslav Meshkov, 25 февраля 2019, 22:46 Andrey Davydov, Тут возникло недопонимание ввиду того, что я допустил ошибку, в отличие от первого поста. Имелось ввиду static const int. А теперь также можете проверить на godbolt.org.
Перенос предложения: голоса +1, -3 Автор идеи: Vyacheslav Meshkov
Заменить на: