170 похожих чатов

Привет всем. Кто-то сталкивался с проблемами с structured bindings для

классов под MSVC?

31 ответов

14 просмотров

Сразу проблему описывай

LaG1924- Автор вопроса
Alexander Karaev
Сразу проблему описывай

Access Violation. Не инициализированные переменные вместо содержимого разбинженной структуры.

LaG1924
Access Violation. Не инициализированные переменные...

Можно пример кода, версию MSVC и подтверждение, что сама структура в порядке?

LaG1924- Автор вопроса
Dmitriy [Отпуск]
Можно пример кода, версию MSVC и подтверждение, чт...

Настоящий пример кода с проблемой есть только в моем проекте. Если буду тратить много времени на получение минимально воспроизводимого фрагмента, то могу сразу в MS багрепорт отправить. Наглядный пример проблемы: // объявление функции и возвращаемого значения struct FooResult {int a; std::string b; bool c;}; asio::awaitable<FooResult> Foo(int x, std::string y); //в коде где используется функция auto ret = co_await Foo(x, y); auto [a,b,c] = std::move(ret); Здесь сразу после выполнения Foo, в ret находятся валидные данные, однако после выполнения строчки с биндингом, в ret оказываются moved-out данные (что логично и нормально), а переменные a b и c содержат мусор (отладчик студии показывает std::string как <NULL>, bool как true(230) и т.д.)

LaG1924
Настоящий пример кода с проблемой есть только в мо...

Отладчик показывает или ниже действительно оказываются проблемы?

LaG1924
Настоящий пример кода с проблемой есть только в мо...

https://en.cppreference.com/w/cpp/language/structured_binding > Like a reference, a structured binding is an alias to an existing object. Unlike a reference, a structured binding does not have to be of a reference type.

Aleksander Spichak
а для чего тут мув?

чтобы не делать копирование?)

Denis P
чтобы не делать копирование?)

Какое копирование? Там особая категоря значения для structure binding

Aleksander Spichak
Какое копирование? Там особая категоря значения дл...

то есть копирования по вашему в коде без мув не будет?

пардон, ТС'у нужно: auto&& [a,b,c] = ret; Всегда так юзаю, не обратил внимания, что у него нет двойного амперсанда

LaG1924- Автор вопроса
Dmitriy [Отпуск]
Отладчик показывает или ниже действительно оказыва...

Отладчик показывает. Отлаживаю какой-то не понятный баг с AccessViolation. И вызов деструкторов над невалидными объектами очень подходит под описание. Причем, краш происходит только в релизной сборке (выключена оптимизация и добавление pdb и для дебага и для релиза). Стектрейс (если нужно) самого краша (boost.)asio: https://pastebin.com/NVUCdtWv

LaG1924- Автор вопроса
Aleksander Spichak
а для чего тут мув?

Для наглядности. Раньше его не было. Но когда увидел, что отладчик показывает невалидные значения переменных добавил временную переменную.

LaG1924
Настоящий пример кода с проблемой есть только в мо...

ну я не исключаю, что мсвц неправильно скомпилировал, но мув здесь лишний, auto& [a, b, c] = ret; это просто синтаксический сахар и не более ,никаких копирований и даже созданий ссылок

Denis P
то есть копирования по вашему в коде без мув не бу...

мув делает больше работы, чем эквивалетное создание через ссылку(noop)

Kelbon
мув делает больше работы, чем эквивалетное создани...

разве мув что-то делает? (кроме того как "метит" значение)

Aleksander Spichak
пардон, ТС'у нужно: auto&& [a,b,c] = ret; Всегда ...

лучше явно написать одиночный амперсанд, потому что это lvalue

Aleksander Spichak
разве мув что-то делает? (кроме того как "метит" з...

делает, создаётся новое значение и мувается из ret в новое значение, а a, b, c становятся алиасами на поля в новом значении

Kelbon
мув делает больше работы, чем эквивалетное создани...

а это к чему? утверждение вроде было, что там будет копирование

Kelbon
ну я не исключаю, что мсвц неправильно скомпилиров...

на уровне языка сахар, на уровне асма никто не гарантирует, что никаких ссылок не будет

Denis P
на уровне языка сахар, на уровне асма никто не гар...

на уровне асм никто ничего не гарантирует, там может бытть просто бесконечное xor eax eax

Kelbon
на уровне асм никто ничего не гарантирует, там мож...

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

Denis P
мне не понятно, зачем делать какие-то утверждения ...

потому что с точки зрения языка это не ссылки, а structured binding'и

клюквенный сбитень
Это мув конструктор срет имхо

Нифига себе, это ж телепатия, 120ый уровень!

Ilya Zviagin
Нифига себе, это ж телепатия, 120ый уровень!

чё, не перевелись ещё телепаты в чате?

Похожие вопросы

Обсуждают сегодня

/////////////////////////////////////// TChart / TLineSeries - сохранение данных (текстовый файл) /////////////////////////////////////// добрый день / работа с графиком: 1....
livontiy
14
Чем больше разбираюсь с интерфейсами в дельфи, тем меньше понимаю, как работает поиск имен. type IIntf = interface function GetStr: string; end; IChild = interface(I...
Jack128
9
Мне интересно, скорее людей здесь используют D, Rust, C/C++ для решения реальных прикладных задач за деньги?)
Evil Satanson
43
кто поможет крякнуть чит? (реверс инжиринг) чтобы разблокировать премиум версию
Mёdkinson Medvezhkin
39
А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
давайте за механические клавиатуры потрём, мне тут неучтенных денег упало и их можно потратить на что-то такое, вот думаю про dark project kd87a, кто-то имеет что-то подобное?
Oleg Nosov
24
Подскажите, сейчас что то есть (JS модуль какой-нибудь), что можно использовать для: 1) переваривания javascript codа из html fileа, т.е. разбивки, на переменные, команды, бло...
Iar De
15
Вопрос по организации кода. Пилю свой велосипед логгер Есть у меня множество уровней сообщений. Я набрасываю сообщения в стринглист, а когда они нужны, вызываю их через функц...
Serjone
21
Ребя, тут спрашивают, что лучше использовать для юзербота на java? 👀
Mars BATYA [NYА]
12
тут же люди сидят начитанные. хочу написать кроссплатформенный анонимный сетевой чат. данный проект ни на что не претендует, скорее просто студенческая работа. можете посовето...
Óðinn
12
Карта сайта