Size: a a a

2020 March 23

NP

Nikita Provotorov in pro.cxx
Побитый Кирпич
Функцию swap свободную надо сделать, которая будет в том же namespace что и класс
Угу, или френда бабахнуть)
источник

ПК

Побитый Кирпич in pro.cxx
Nikita Provotorov
Угу, или френда бабахнуть)
Это то же самое будет
источник

NP

Nikita Provotorov in pro.cxx
Побитый Кирпич
Это то же самое будет
Не отрицаю
источник

NP

Nikita Provotorov in pro.cxx
Pavel Kazakov
это плохой трейт
Почему?
источник

PK

Pavel Kazakov in pro.cxx
трейты должны быть в духе Serializable -- функциональность показывать, а не детали реализации вскрывать
источник

PK

Pavel Kazakov in pro.cxx
сложно придумать удачные примеры, но про это итак много копий сломано
источник

NP

Nikita Provotorov in pro.cxx
Pavel Kazakov
трейты должны быть в духе Serializable -- функциональность показывать, а не детали реализации вскрывать
Так Swappable и показывает функциональность; он говорит что тип является Swappable если следующий код заработает:
using std::swap; swap(a, b);
источник

PK

Pavel Kazakov in pro.cxx
ну и по реализации этого трейта: вот засфинаишь через declval по методу swap(), и что, теперь вообще всё остальное нельзя свапать? :)
источник

PK

Pavel Kazakov in pro.cxx
есть же static duck typing в метапрограммировании на плюсах -- если что-то не сработает, то в лучшем случае где-то ебнется статик ассерт и компиляция не пройдет :D
источник

NP

Nikita Provotorov in pro.cxx
Pavel Kazakov
ну и по реализации этого трейта: вот засфинаишь через declval по методу swap(), и что, теперь вообще всё остальное нельзя свапать? :)
Вообще не понял, при чем тут SFINAE?
источник

PK

Pavel Kazakov in pro.cxx
ты же в изначальном вопросе хотел узнать есть ли метод swap у параметра функции? это только так и делается
источник

NP

Nikita Provotorov in pro.cxx
Pavel Kazakov
ты же в изначальном вопросе хотел узнать есть ли метод swap у параметра функции? это только так и делается
А, ну да, так там и без этого есть SFINAE
источник

NP

Nikita Provotorov in pro.cxx
И есть fallback для movable значений
источник

PK

Pavel Kazakov in pro.cxx
Nikita Provotorov
Так Swappable и показывает функциональность; он говорит что тип является Swappable если следующий код заработает:
using std::swap; swap(a, b);
а вот это... ну своп итак шаблонная функция, зачем ей еще проверок докручивать? мне кажется, ее лучше не сделаешь
источник

NP

Nikita Provotorov in pro.cxx
Pavel Kazakov
а вот это... ну своп итак шаблонная функция, зачем ей еще проверок докручивать? мне кажется, ее лучше не сделаешь
Вы удивитесь, но даже в текущем виде std::swap проверяет некоторые вещи по SFINAE
источник

PK

Pavel Kazakov in pro.cxx
круто тогда :) но кажется, именно тут нечего сделать лучше, но я рад ошибаться! :D
источник

m

magras in pro.cxx
Побитый Кирпич
Зачем тогда у memcpy такая сигнатура?

void *memcpy (void *__restrict __dest, const void *__restrict __src,  size_t __n)
Мне кажется здесь это для того чтобы донести до компилятора, что dst и src не пересекаются.
источник

ПК

Побитый Кирпич in pro.cxx
magras
Мне кажется здесь это для того чтобы донести до компилятора, что dst и src не пересекаются.
Значит void* алиасится с другим void*? А с другим типом нет?
источник

m

magras in pro.cxx
Побитый Кирпич
Значит void* алиасится с другим void*? А с другим типом нет?
Естественно два указателя или ссылки на один и тот же тип могут указывать на один объект.

Но, на сколько я знаю, только char и byte могут алиаситься с другими типами.
источник

PK

Pavel Kazakov in pro.cxx
magras
Естественно два указателя или ссылки на один и тот же тип могут указывать на один объект.

Но, на сколько я знаю, только char и byte могут алиаситься с другими типами.
три: char, unsigned char и std::byte
источник