Ioann_
int128_t не влезет в 32
А int128 стандартизирован ли ?
Constantine
А int128 стандартизирован ли ?
что мешает в следующем стандарте его добавить?
Constantine
что мешает компилятору считать имеющийся __int128_t как intmax_t
Vladislav
ноуп
а жаль
Constantine
Обещают жеж wide int.
wide int это эмуляция, она не касается intmax_t
Constantine
причем эмуляция через uintfast_t или как он там
Ioann_
Я бы руками бахнул. Даже так - я и так руками бахнул. Делов то переводить стандартные типы, отличные от дабла.
Anton
wide int это эмуляция, она не касается intmax_t
Ничего не мешает simd там вхерачить. Но это детали реализации уже.
Constantine
угу
Ioann_
В нулевых кстати, все на stl плевались
Ioann_
И знаешь что ????? Недовольные писали свой :)
Constantine
Меня интересует не std::stack который реализован через vector
Constantine
Меня интересует задача "перевести число в строку"
Constantine
Напомню, такая встроенная функция была в Turbo Pascal
Constantine
Полагаю, 30 лет назад была
Ioann_
Сформулируй ее более четко, пожалуйста
Constantine
Задача: перевести число типа uintmax_t в std::wstring локаль-независимым способом
Constantine
Для целей записи в JSON, например
Ioann_
Окей, я посмотрю что с этим можно сделать, а вечером сегодня по Мск тебе напишу, что я нашел.
Constantine
😆
Ioann_
А чо ржачного то, я уже сплю, считай
Constantine
Ржачно, что этот вопрос вызывает замешательство в pro.cxx
Constantine
В любом нормальном языке такой вопрос отправляется в ultramegapro
Stanislav
И знаешь что ????? Недовольные писали свой :)
у некоторых до сих пор живой
Stanislav
https://github.com/electronicarts/EASTL
Ioann_
Я уверен, с этим можно что то сделать. В моем случае замешательство более чем очевидно - я вообще не приспешник стандарта.(stl...)
Ioann_
Пока что могу посоветовать попробовать qt :))))))))
Constantine
Ну через "я точно знаю, что результат лезет в std::numeric_limits<uintmax_t>::digits10() + 2" это реализуется адекватно
Constantine
Через swprintf
Ioann_
Ну это я так понимаю С ? А ты хочешь ц плац плац ?
Constantine
Я хочу на С++
Constantine
Если оно не будет использовать какое-либо подмножество С++, реализация меня все еще устраивает
Ioann_
Гляну, конечно же. Мне просто самому даже интересно, что там.
Constantine
Да, еще на M$ можно сделать через _snwprintf
Ioann_
https://github.com/electronicarts/EASTL
Угу. Я тестировал его, когда тут еще cyberzx был, которого беркус увы прогнал
Ioann_
Да, еще на M$ можно сделать через _snwprintf
Ну это таже сишка, будем считать.
Constantine
https://github.com/electronicarts/EASTL
как же они форматируют ифдефы в optional
Constantine
Stanislav
классика, намешанные пробелы и табы
Constantine
это точно программисты, а не водопроводчики?
Ioann_
Форматировано плохо - а может потому что у гитхаба чот полетело ?
Constantine
Угу, а MAYBE_NOEXCEPT в NOEXCEPT это гитхаб MAYBE_ из кода удаляет
Ioann_
Ну мне опшионал как то более читаемо
Stanislav
это точно программисты, а не водопроводчики?
саммое смешное если включены ексепшены то дефайн пустой
Ioann_
Ну а так а суть, ты придрался к их коду, что он так ужасен ?
Constantine
Ну а так а суть, ты придрался к их коду, что он так ужасен ?
Я бы за такое дал по рукам стажеру в write-only коде
Stanislav
эх когда гитхаб научится рендерить хтмлки
Ioann_
А, кстати я всек то что не так, понял - да. Тут есть такое, мне просто показалось что ты тупо на выравнивание и именования наезжаешь.
Ioann_
Тогда во втором дефайне типо лучше сделать вторую проверку ?
Constantine
А, кстати я всек то что не так, понял - да. Тут есть такое, мне просто показалось что ты тупо на выравнивание и именования наезжаешь.
Ну если бы они optional реализовали криво настолько, что первый попавшийся челик ткнул их носом в ошибку, им бы надо было выбросить компьютер и купить велосипед
Constantine
хотя если подумать
Constantine
inline optional& operator=(const optional& other) { engaged = other.engaged; val = other.val; return *this; }
Constantine
эх подозрительно
Constantine
нет проверки engaged перед копированием val
Ioann_
Проверки на саму себя то ?
Constantine
ну они либо а) создают объект под optional если engaged в значении false б) вызывают оператор присваивания нижележащего типа с неинициализированной правой частью
Constantine
вроде я проверил и (а) они не делают
Constantine
так что (б)
Constantine
void assign(const Optional& src) { if (src.hasValue()) { assign(src.value()); } else { clear(); } }
Constantine
реализация из folly закономерно проверяет hasValue
Ioann_
Такая проверка стоит чего то
Constantine
Хм... вообще-то если ее не сделать то код UB
Ioann_
А у них там указатели или чего ?
Constantine
Там union у всех
Ioann_
И правая часть может быть неинициализирована ?
Constantine
А, гоню, в folly там std::aligned_storage
Constantine
Да, может
Ioann_
Можешь скинуть что за типы там ?
Ioann_
Вот что говорит стандарт на эту тему
Ioann_
an expression evaluating to an indeterminate value causes undefined behavior, with certain exceptions (8.5p12)unsigned char (and possibly char, if unsigned) is the exceptionvariables with automatic storage duration and whose types have trivial default initialization initially have indeterminate values (5.3.4p17)
Constantine
Хм... там реализация optional<T>
Ioann_
For any object (other than a base-class subobject) of trivially copyable type T, whether or not the object holds a valid value of type T, the underlying bytes (1.7) making up the object can be copied into an array of char or unsigned char. If the content of the array of char or unsigned char is copied back into the object, the object shall subsequently hold its original value.
Ioann_
For any trivially copyable type T, if two pointers to T point to distinct T objects obj1 and obj2, where neither obj1 nor obj2 is a base-class subobject, if the underlying bytes (1.7) making up obj1 are copied into obj2, obj2 shall subsequently hold the same value as obj1. [ Example: T* t1p; T* t2p; // provided that t2p points to an initialized object ... std::memcpy(t1p, t2p, sizeof(T)); // at this point, every subobject of trivially copyable type in *t1p contains // the same value as the corresponding subobject in *t2p —end example ]
Ioann_
Arithmetic types (3.9.1), enumeration types, pointer types, pointer to member types (3.9.2), std::nullptr_- t, and cv-qualified versions of these types (3.9.3) are collectively called scalar types. Scalar types, POD classes (Clause 9), arrays of such types and cv-qualified versions of these types (3.9.3) are collectively called POD types. Cv-unqualified scalar types, trivially copyable class types (Clause 9), arrays of such types, and nonvolatile const-qualified versions of these types (3.9.3) are collectively called trivially copyable types
Ioann_
A trivially copyable class is a class that: (6.1) — has no non-trivial copy constructors (12.8), (6.2) — has no non-trivial move constructors (12.8), (6.3) — has no non-trivial copy assignment operators (13.5.3, 12.8), (6.4) — has no non-trivial move assignment operators (13.5.3, 12.8), and (6.5) — has a trivial destructor (12.4).