Size: a a a

2020 September 04

p

paperbot_cpp in pro.cxx
источник

m

magras in pro.cxx
P1999
источник

AZ

Alexander Zaitsev in pro.cxx
{p1999}
источник

p

paperbot_cpp in pro.cxx
источник

AZ

Alexander Zaitsev in pro.cxx
а я прочитал :)
источник

m

magras in pro.cxx
Спасибо. Раньше он вроде по-другому работал.
источник

AZ

Alexander Zaitsev in pro.cxx
magras
Спасибо. Раньше он вроде по-другому работал.
да, совершенно верно - раньше было иначе. Теперь он приближен отчасти к слаковскому npaperbot, если кто имеет с ним опыт работы
источник

AL

Anton Leontyev in pro.cxx
Оо
источник

DS

Dmitry Sokolov in pro.cxx
Antony Polukhin
Неа

Я посправшивал в комитете, как им такое, люди предложили
* убрать UB
* втащить Boots.Intrusive
* добавить iterator_to

но восторга не по поводу идеи испытали)
А убрать UB это легализовать что-то вроде линуксового container_of в дополнение к offsetof?
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
А убрать UB это легализовать что-то вроде линуксового container_of в дополнение к offsetof?
Надо уже расчехлять декомпозиции наследования? Это очень похоже на static_cast от Base& к Derived&, только не надо виртуальные таблицы перекрывать :)
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
Надо уже расчехлять декомпозиции наследования? Это очень похоже на static_cast от Base& к Derived&, только не надо виртуальные таблицы перекрывать :)
Не, тут не обойтись наследованием, в случае Антона например я так понял это не через value_type а через mapped_type получение node_type, т.е. по ссылке на second надо получить pair а потом уже можно и cast к derived если node_type наследует pair.
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Не, тут не обойтись наследованием, в случае Антона например я так понял это не через value_type а через mapped_type получение node_type, т.е. по ссылке на second надо получить pair а потом уже можно и cast к derived если node_type наследует pair.
так если struct Pair: T1, T2 то можно кастовать T2& к Pair& через static_cast
источник

CD

Constantine Drozdov in pro.cxx
Base к Derived, не наоборот, обратный каст
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
так если struct Pair: T1, T2 то можно кастовать T2& к Pair& через static_cast
Но value_type это же std::pair, а там не наследование.
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Но value_type это же std::pair, а там не наследование.
Ну значит автор считает, что так кастовать нельзя :)
источник

CD

Constantine Drozdov in pro.cxx
Весь прикол истории про декомпозированное наследование в том, что компилятор делает N действий при наследовании, перекрытие vtbl требует предыдущих действий, но при этом от него ничего не зависит и его можно убрать
источник

CD

Constantine Drozdov in pro.cxx
И окажется, что существует ровно такая же иерархия агрегации - в частности, с разрешенными кастами в две стороны и в одну сторону (virtual)
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Но value_type это же std::pair, а там не наследование.
И если смотреть с этой стороны, pair описан как класс с двумя виртуальными агрегатами, так что каст назад невозможен. Что касты вниз явные и еще именованы first/second не играет роли
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
И если смотреть с этой стороны, pair описан как класс с двумя виртуальными агрегатами, так что каст назад невозможен. Что касты вниз явные и еще именованы first/second не играет роли
Да вроде как проблем нет если есть явный адрес second_type, неважно виртуальный он или нет. Это ж конечный объект. Т.е. не понимаю, как в этом случае может поломаться тот же container_of.
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Да вроде как проблем нет если есть явный адрес second_type, неважно виртуальный он или нет. Это ж конечный объект. Т.е. не понимаю, как в этом случае может поломаться тот же container_of.
Номинально по стандарту поломаться, offsetof и тот определен в районе си-совместимости
источник