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

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

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

31 ответов

32 просмотра

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

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'и

Rustam
Это мув конструктор срет имхо

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта