Для static inline статических членов класса слово inline лишнее.

Vyacheslav Meshkov
Vyacheslav Meshkov

class A {

static const int ivar = 0;

static const inline std::string = "text";

...

};

Заменить на:

class A {

static const int ivar = 0;

static const std::string = "text";

...

};

 

-1
рейтинг
4 комментария
Andrey Davydov

Во-первых, для типов с нетривиальными конструкторами важно, в какой момент они исполнятся, сейчас у пользователя есть возможность повлиять на это, а с Вашим предложением -- не будет.

Во-вторых, если принять такое правило, то весь старый код, где у static полей уже был definition, начнет нарушать ODR, не так ли?

Andrey Davydov
Vyacheslav Meshkov

Andrey Davydov, Мне тут сложно знать тонкости, потому что я не компиляторщик, и деталей не знаю. Могу лишь предположить, что вроде как сейчас оба варианта ниже уже допустимы, и проблем ODR не вызывают, верно?

1:

class A {

static int a = 10;

};

2:

class A {

static int a;

};

int A::a = 10;

 

Vyacheslav Meshkov
Andrey Davydov

Vyacheslav Meshkov, ну коли Вы не компиляторщик, так проверили бы компиляторами: https://gcc.godbolt.org/z/7J_20F. non-const static data member нельзя инициализировать inplace.

Andrey Davydov
Vyacheslav Meshkov

Andrey Davydov, Тут возникло недопонимание ввиду того, что я допустил ошибку, в отличие от первого поста. Имелось ввиду static const int. А теперь также можете проверить на godbolt.org.

Vyacheslav Meshkov
Обновлено 
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения