kasper93 kasper93 22.12.2013, 01:07:14 2 + #cpp11 #programowanie #msvc #ciekawostki #bugi #vs2013Visual źle kompiluje ten kod, nawet nie daje żadnego ostrzeżenia nic. Po prostu dla nienazwanej struktury nie inicjalizuje zmiennej. https://gist.github.com/kasper93/d6aa49971608d1b4caa6Oczywiście w GCC działa poprawnie.
kasper93 kasper93 22.12.2013, 01:09:12 0 + Jak wpiszemy strukturę poza klasą to wywali an in-class initializer is not allowed for a member of an anonymous union in non-class scopeAle w załączonym przykładnie nie ma żadnego błędu...
Windmark Windmark 22.12.2013, 01:32:31 1 + @kasper93: przecież assert w tym przykładzie nic nie wyrzuci
kasper93 kasper93 22.12.2013, 01:33:27 0 + @Windmark: Nie powinien, ale VS2013 nie inicjuje jednego "i"...
kasper93 kasper93 22.12.2013, 01:36:50 0 + @Windmark: Tym, że named.i == 10unamed.i jest śmieciemProblem nie jest jakiś poważny, bo każdy to zauważy, ale powinien kompilator powinien rzucić error w tym wypadku...
Windmark Windmark 22.12.2013, 01:40:00 1 + @kasper93: a jak dopiszesz trzecią strukturę, to co się stanie?
kasper93 kasper93 22.12.2013, 01:41:45 0 + @Windmark: Będą trzy struktury. Jeszcze zależy jak je nazwiemy.
Windmark Windmark 22.12.2013, 01:52:42 1 + @kasper93: oo, dopiero zauważyłem, że struktura unamed jest nienazwana. W sumie to nie wiedziałem, że się tak da.
KrzaQ2 KrzaQ2 22.12.2013, 07:47:47 0 + @kasper93: Nice find. Przez chwilę myślałem, ƶe to UB (bo klasa wygląda trochę jak agregat - dopóki nie zauwaƶysz inicjalizacji zmiennych w definicji klasy - i inicjalizujesz bez () ), ale faktycznie wygląda na niepoprawne zachowanie kompilatora. Zresztą nawet ktoś juƶ to zgłosił: https://connect.microsoft.com/VisualStudio/feedback/details/808506/nsdmi-silently-ignored-on-nested-anonymous-classes-and-structs
Visual źle kompiluje ten kod, nawet nie daje żadnego ostrzeżenia nic. Po prostu dla nienazwanej struktury nie inicjalizuje zmiennej.
https://gist.github.com/kasper93/d6aa49971608d1b4caa6
Oczywiście w GCC działa poprawnie.
Ale w załączonym przykładnie nie ma żadnego błędu...
named.i == 10
unamed.i jest śmieciem
Problem nie jest jakiś poważny, bo każdy to zauważy, ale powinien kompilator powinien rzucić error w tym wypadku...
()), ale faktycznie wygląda na niepoprawne zachowanie kompilatora. Zresztą nawet ktoś juƶ to zgłosił: https://connect.microsoft.com/VisualStudio/feedback/details/808506/nsdmi-silently-ignored-on-nested-anonymous-classes-and-structs