Size: a a a

2021 February 15

D

Dmitriy in pro.cxx
Побитый Кирпич
Не, конкретно в случае варнинга
int
источник

ПК

Побитый Кирпич... in pro.cxx
Ну судя по доке, компилятор думает, что int dummy{}; "terminates in a destructor". 😕
источник

D

Dmitriy in pro.cxx
Побитый Кирпич
Ну судя по доке, компилятор думает, что int dummy{}; "terminates in a destructor". 😕
Кажется, этот тот самый случай, когда думать компилятору вредно
источник

ПК

Побитый Кирпич... in pro.cxx
Dmitriy
Кажется, этот тот самый случай, когда думать компилятору вредно
А если явно написать int dummy{};?
источник

SE

Stanislav Ershov in pro.cxx
Dmitriy
Нарвался я на крайне любопытный warning в MSVC:
warning C4722: mpmc_queue<int, aligned_paged_allocator>::~mpmc_queue<int,aligned_paged_allocator>: деструктор не возвращает ресурсы, возможна утечка памяти
Код деструктора (lockfree-очередь):
Ty dummy{};
   for (;;) {
     if (!unsynchronized_pop_impl<false>(dummy)) {
       break;
     }
   }
   destroy_node(node_pointer{m_head});

Параметр шаблона false означает "не копировать данные в output перед запихиванием узла во freelist"
Что не нравится компилятору?
ну тут думаю не вредно и багрепорт отправить
источник

D

Dmitriy in pro.cxx
Побитый Кирпич
А если явно написать int dummy{};?
Аналогично
источник

ПК

Побитый Кирпич... in pro.cxx
Dmitriy
Аналогично
Ну эт баг явно
источник

D

Dmitriy in pro.cxx
Могу предположить, что компилятор посчитал цикл бесконечным
источник

ПК

Побитый Кирпич... in pro.cxx
Dmitriy
Могу предположить, что компилятор посчитал цикл бесконечным
типа раз он бесконечный, то единсвенный выход из него - что то типа std::exit :)
источник

D

Dmitriy in pro.cxx
Побитый Кирпич
типа раз он бесконечный, то единсвенный выход из него - что то типа std::exit :)
Да, ибо в unsynchronized_pop_impl() есть конструкция for(;;) с двумя выходами
источник

EP

Egor Pugin in pro.cxx
почему так не работает? Если вынести внутреннюю структуру наружу, то собирается
https://godbolt.org/z/nGbYoK
источник

D

Dmitriy in pro.cxx
Есть лишь одно "но": бустовская lockfree::queue с крайне похожим кодом деструктора компилируется
источник

DF

Dollar Føølish in pro.cxx
А в чем разница с бустовской?
источник

DF

Dollar Føølish in pro.cxx
То что атомик используется ?
источник

D

Dmitriy in pro.cxx
Dollar Føølish
А в чем разница с бустовской?
Если кратко - это фактически её порт под платформу, где нет STL и крайне сложно притащить буст целиком
источник

DF

Dollar Føølish in pro.cxx
Ну да, вот и интересна разница
источник

DF

Dollar Føølish in pro.cxx
Почему в той компиль не орет
источник

D

Dmitriy in pro.cxx
Dollar Føølish
Ну да, вот и интересна разница
Нет атомиков (заменены на специфичные interlocked-интринсики). Свой набор трейтов. Вторым шаблонным параметром можно передать некий "базовый" аллокатор, через который пул узлов потом сможет память у системы дергать. Пожалуй, всё...
источник

D

Dmitriy in pro.cxx
Местами просто куски взяты
источник

DF

Dollar Føølish in pro.cxx
Спасибо
источник