интересуюсь плюсами довольно давно... вообщем преамбулу отбросим,
нашёл баг еще в начале года в VS2017 (15.6.х) компилере (пофиксили буквально неделю назад в обнове 15.7.1)
баг в том что если есть например родительский класс с парой мемберов(неважно сколько и каких) и конструктором принимающим допустим 2 аргумента, то если с дочернего класса из constructor member initializer попытаться вызвать этот конструктор юниформно и не с 2мя аргументами а например с тремя, то есть derived() : base{1,2,3}{} то студийный компилер это спокойно хавал (в отличии от gcc и clang, и даже родного IntelliSense,который это место считал ошибочным), и на выходе получалось что базовый класс не проинициализирован а в дочернем всё ок. но это ладно, пофиксили и хорошо, просто
тут еще одна фантазия возникла:
#pragma pack(1)
struct _jGate
{
// due to initializers, added implicit ctor and called on creation
const unsigned char j_code = 0xEE;
unsigned int j_address;
const unsigned short int j_segment = 0x0033;
};
#pragma pack()
...
jGate stub{ 1}; // sets j_code member to 1, which is initially const.! Clang & gcc does same
// stub.j_code = 0xee; // error C3892: 'stub': you cannot assign to a variable that is const
тут вот вопрос, а вообще логично ли инициализировать константный мембер если у него уже в определении структуры есть инициализатор? (это я вообще юниформной инициализаций заморочился)
(пс код и комменты писать по русски не могу - глаза режет)