Size: a a a

2020 July 17

CD

Constantine Drozdov in pro.cxx
Ilia Zviagin
Так иногда не работает или никогда не работает?
На хрюшке при LoadLibrary кажется небольшой запас есть, я не уверен, давно это было
источник

v

vehlwn in pro.cxx
Aidar Fattakhov
Как ты собрался выводить таймпоинт?
Есть только один формат таймпоинтов - исо 8601.
источник

AF

Aidar Fattakhov in pro.cxx
vehlwn
Есть только один формат таймпоинтов - исо 8601.
ага, и в нем 100500 форматов
источник

AF

Aidar Fattakhov in pro.cxx
ты хоть читал его?
источник

AF

Aidar Fattakhov in pro.cxx
vehlwn
Есть только один формат таймпоинтов - исо 8601.
кстати судя по логике iostreamов оно должно по локали форматироваться и никак иначе
источник

v

vehlwn in pro.cxx
Aidar Fattakhov
ага, и в нем 100500 форматов
Ну и что. Выберите какой хотите. Там есть расширенный форма с десятичными долями.
источник

AF

Aidar Fattakhov in pro.cxx
Aidar Fattakhov
кстати судя по логике iostreamов оно должно по локали форматироваться и никак иначе
я не уверен что сейчас в c++ локали есть датавремя
источник

AT

Anatoly Tomilov in pro.cxx
magras
Кажется, этим можно управлять в рантайме через оператор сравнения аллокатора. Если propagate_on_container_move_assignment is false, но сравнение исходного и целевого аллокатора дают true, вектор вроде просто свопнет указатели. Но для того, чтобы это работало, нужно чтобы аллокатор знал используется ли его внутренний буфер.
хоть false, хоть true — один фиг неверный аллокатор используется при освобождении https://wandbox.org/permlink/fcVeSiGYWOSM1EGO (и с libc++ и с libstdc++ (gcc)).
источник

m

magras in pro.cxx
Здесь происходит вызов move ctor, а не оператора присваивания. На него propogate не должны влиять и там не с чем сравнивать аллокатор.

С ходу я не соображу что тут можно сделать. Пойду почитаю требования к аллокатору еще раз. Вероятно реализации предполагают, что аллокатор после мува обязан быть compare equal.
источник

m

magras in pro.cxx
A a1(std::move(a))

Constructs a1 such that it equals the prior value of a.  

   Does not throw exceptions.
   The value of a is unchanged and a1 == a.

То есть такая реализация оператора сравнения нарушает требования к аллокатору.
источник

m

magras in pro.cxx
Кажется, что это означает, что аллокатор не может хранить буффер внутри себя для выделения памяти.
источник

AT

Anatoly Tomilov in pro.cxx
magras
Кажется, что это означает, что аллокатор не может хранить буффер внутри себя для выделения памяти.
если a1 == a — это postcondition, то да. Вот же ж какая негибкость!
источник

m

magras in pro.cxx
Anatoly Tomilov
если a1 == a — это postcondition, то да. Вот же ж какая негибкость!
Ага. Идея была хороша. =(
источник

AT

Anatoly Tomilov in pro.cxx
magras
A a1(std::move(a))

Constructs a1 such that it equals the prior value of a.  

   Does not throw exceptions.
   The value of a is unchanged and a1 == a.

То есть такая реализация оператора сравнения нарушает требования к аллокатору.
Оператор сравнения может и false возвращать во всех случаях. От него не зависит совсем перемещение, к сожалению
источник

AT

Alexander T in pro.cxx
Помнится, раньше в C++  в принципе нельзя было написать stateful-аллокатор (например, с внутренним буфером), удовлетворяющий всем требованиям Стандарта (но это не точно). Разве что-то поменялось?
источник

AT

Alexander T in pro.cxx
Как раз всегда была проблема с копированием и присваниванием, вроде
источник

m

magras in pro.cxx
Alexander T
Помнится, раньше в C++  в принципе нельзя было написать stateful-аллокатор (например, с внутренним буфером), удовлетворяющий всем требованиям Стандарта (но это не точно). Разве что-то поменялось?
С 11ого стандарта они стали statefull.
источник

AT

Alexander T in pro.cxx
Ну, или можно написать-то, но они становятся неюзабельными, потому что перестают удовлетворять pre/post-условия при работе со стандартной либой
источник

m

magras in pro.cxx
Anatoly Tomilov
Оператор сравнения может и false возвращать во всех случаях. От него не зависит совсем перемещение, к сожалению
Оператор сравнения говорит можно ли удалять память выделенную одним аллокатором через другой.

Если в операторе присваивания вектора у правого аллокатора propogate is false, действия вектора зависят от результата сравнения левого и правого аллокатора. Если они равны, можно просто поменять указатели, иначе нужно копировать данные.
источник

AT

Anatoly Tomilov in pro.cxx
magras
Оператор сравнения говорит можно ли удалять память выделенную одним аллокатором через другой.

Если в операторе присваивания вектора у правого аллокатора propogate is false, действия вектора зависят от результата сравнения левого и правого аллокатора. Если они равны, можно просто поменять указатели, иначе нужно копировать данные.
да. Я это про контекст конструктора перемещения, а не операторов копирования/перемещения
источник