several
2018-12-20 07:52

Niechcący znalazłem buga w Visual Studio. Albo raczej w microsoftowym kompilatorze c++.

W chwili słabości popełniłem błędny kod, w którym, upraszczając, chciałem przez wartość zwrócić unique_ptr otrzymany przez structure bindings. Zmienne ze structure bindings są referencjami do pól właściwego, ukrytego agregatu więc nie można dla nich zastosować RVO, dlatego w przypadku operowania na unique_ptr muszę użyć jawnie std::move jeśli chce go zwrócić.

Visual nie dość, że to skompilował, to w debugu wszystko chodziło poprawnie. Dopiero na release był rzucany brzydki wyjątek naruszenia adresu powrotu - naruszenie stack cookies albo kanarka jak kto woli. G++ i clang poprawnie nie skompilowały kodu.

vpiotr

Bardzo dobre wnioski. Zwłaszcza G++ pomaga mi znaleźć takie dziwne błędy - jest mniej wyrozumiały od Visual Studio.

Hispano-Suiza

@several: I to pytanie o fix w wersji VS2019 :D

several

Czort ich wie co oni rozumieją przez następny release. Jakby gość napisał "następny update" nie byłoby niedomówień.

Aryman1983

@several: to na pewno będzie 2019 bo już wcześniej pisali, że kończą updatey dla 2017(no chyba, że trafi się jakiś critical)