Дмитрий ⬡
значение копироваться не может, а std::list должен?
А что мешает списку вызвать конструктор копии?
Anatoly
А что мешает списку вызвать конструктор копии?
стоп, поправь меня, сейчас 20.02.2018? вторник?
Дмитрий ⬡
Ну да
Дмитрий ⬡
Мне казалось list изнутри ведёт себя как список, и для копирования присваиванием ему надо было бы построить новые ноды
Anatoly
Ну да
значит все в порядке, если T не Copyable, то и std::list<T> не Copyable
Дмитрий ⬡
значит все в порядке, если T не Copyable, то и std::list<T> не Copyable
Я и не спрашиваю, что это так, я спрашиваю с чего бы он такой.
Дмитрий ⬡
И вот на это ответа нет)
Anatoly
Я и не спрашиваю, что это так, я спрашиваю с чего бы он такой.
то есть ты ожидаешь, что node благополучно скопируется, если он хранит не копируемое значение
Anatoly
что за фигня?
Дмитрий ⬡
Копируемое конструктором, но не присваиванием.
Дмитрий ⬡
Условно говоря, пусть я храню в списке структуры с const-полем. Их можно строить сколько влезет, но не переприсваивать. Казалось бы, std::list идеально подходит хранить такие штуки, но — почему нет копирующего присваивания таких списков?
Дмитрий ⬡
Ну а что ему. push_back есть, erase есть, итератор есть, мне хватает.
Дмитрий ⬡
(С++11, в старых стандартах не работает конечно)
Дмитрий ⬡
Это же не вектор какой-то
Дмитрий ⬡
Вот!
Дмитрий ⬡
То есть надо проверить, что в стандарте нет требования CopyAssignable к T, и тогда идти пинать libstdc++?
Дмитрий ⬡
Да воркэраунд уже написан, а полыхающий зад ещё не починен.
Дмитрий ⬡
апробовал libc++?
А вот это мысль, спасибо.
Berkus
ДА?
Matwey
ДА?
Ну этого недостаточно же.
Berkus
Ну этого недостаточно же.
ну это лучше чем делетер для юников указывать, ща если я вспомню в какой либе видел такие врапперы, скину линк
Matwey
каждый раз при декларации
https://wandbox.org/permlink/GBhqsay2HhZvAvC8 Декларация ровно в одном месте
Matwey
Зачем мне каждый раз?
Pavel
ёбаный пиздец
Pavel
прастите
Pavel
как это майнтайнить то?
Pavel
впрочем, я, может, просто не привык
Berkus
https://wandbox.org/permlink/GBhqsay2HhZvAvC8 Декларация ровно в одном месте
эээ чувак, ты только что написал враппер класс, как тебе и советовали class wrap_resource { public: wrap_resource(): h_(new_resource()) {
Matwey
эээ чувак, ты только что написал враппер класс, как тебе и советовали class wrap_resource { public: wrap_resource(): h_(new_resource()) {
нет, я написал врапер класс не как мне советовали. мне советовали лепить руками свой деструктор, свой operator delete, и еще кучу текстового шума, потому-что нужно не забыть, например, сделать delete копирующему конструктору и оператору копирования.
Matwey
А моя изначальная претензия вообще была к отсутствию готовой реализации my_deleter<...>.
Berkus
Мо ло дец!
B
есть какие-нибудь техники оптимизации темплейтов? скажем, есть огромный темплейт, он используется в сотне translation units с одним и тем же типом (кастомный тип). очевидно, что definition темплейта будет целиком скопирован в каждый из этой сотни TU, это увеличивает размер бинаря и время компиляции. вопрос такой — можно как-то развернуть темплейт в одном TU и к остальным просто линковать? и вообще, это имеет смысл?
Matwey
Т.е. если я туда впишу все конструкторы и операторы = default, тебе станет легче?
Berkus
Т.е. если я туда впишу все конструкторы и операторы = default, тебе станет легче?
это ничем не будет отличаться от того, что тебе сразу предложили сделать
Berkus
ну, вот так вот
Дмитрий ⬡
апробовал libc++?
Не, ему тоже грустно
Pavel
а почему не вот так хотябы? std::unique_ptr<c_resource, decltype(&free_resource)> h_(new_resource(), &free_resource);
Pavel
зачем вот этот ад на много строк?
Matwey
Твой вариант явно хранит переменную с указателем на функцию заданного типа. Хотя нужна не какая-то функция заданного типа, а одна вполне определенная функция.
B
template instantiation
но его все равно нужно как-то инклудить. instantiation будет происходить где? в cpp?
Berkus
https://github.com/berkus/libarsenal/blob/master/lib/settings_provider.cpp#L91 ну вот как-то так, а в .hpp можно написать extern template .... кажется так
B
блин, огонь. то что нужно, спасибо
Alexander "SonnySlave"
https://www.amazon.com/C-High-Performance-Viktor-Sehr/dp/1787120953
Alexander "SonnySlave"
хорошая?
ну я вот сижу, читаю. пока что норм
Alexander "SonnySlave"
позже ревью отпишу
Pavel
@antoshkka а где можно глянуть полный список докладчиков на cppconf?
Alexander "SonnySlave"
а вся инфа есть на cppconf.ru
Pavel
http://cppconf.ru/talks Тут полный список?
Alexander "SonnySlave"
хочешь свежее - пиши Платонову
Pavel
хочешь свежее - пиши Платонову
https://twitter.com/sermp Это он?
Alexander "SonnySlave"
https://twitter.com/sermp Это он?
да, он в телеге тоже есть
Alexander "SonnySlave"
@sermp
Pavel
ок, спасибо
Sergey
ват?
Sergey
ну сейчас ещё в ревью несколько
Anonymous
короче вот вам рецепт 100% обфускатора кодов на cpp: используя #define дефайнить все элементы программы, включая системные методы, на рандомный набор арабских символов от 5 до 15 все эти дефайны записывать в отдельный скрытый файл, который потом инклудится
ShadoWalkeR
из разряда #define true false
ShadoWalkeR
Особым цинизмом будет на true дефайнить rand))))
Pavel
тянет на дарвина
🐙 Antony
горшочек не вари
Constantine
Разве такок не решается через концепты/SFINAE? Делаем функцию, которая принимает F&& и расставляем ограничения на сигнатуру F.
Это одно из возможных частичных решений, в случае, если концепт подразумевает требования CopyContructible / NoThrowMoveAssignable. Кажется, что указанная схема просто полнее
Constantine
Да, в рамках обсуждения доставляю гениальный обфускатор - в многопоточной среде промежуточный буфер некоторой функции делаем статическим (у меня недавно так рабочий день умер)
Pavel
где вы таких берете
Constantine
Constantine
@antoshkka держите идею: в рамках синтаксиса namespace std::filesystem { } разрешить еще namespace some { namespace ::std {} }, чтобы при специализации extension point из другого namespace не нужно было закрывать этот