Size: a a a

2020 August 14

CD

Constantine Drozdov in rust_offtopic
Roman Proskuryakov
Reference implementation of relocate_at and uninitialized_relocate

template<class T>
T *relocate_at(T *source, T *dest)
{
   if constexpr (std::is_trivially_relocatable_v<T>) {
       std::memmove(dest, source, sizeof(T));
       return std::launder(dest);
   } else {
       T *result = ::new (dest) (std::move(*source));
       source->~T();
       return result;
   }
}


лол. так где там про деструктивный мув? :D
ты его весь прочитал?
источник

Т8

Т-34 85 in rust_offtopic
Т-34 85
ты точно внимательно читал? Там написано, что если хочешь всегдп кидать ошибку при дереференсе 0, юзай -fno-delete-null-pointer-checks
короче, Царь - гений, он мне глаза раскрыл
источник

RP

Roman Proskuryakov in rust_offtopic
Constantine Drozdov
ты его весь прочитал?
я дочитал до "As discussed in EWGI at San Diego, this proposal does not give us a general user-provided "destructive move" facility." Этого достаточно.
источник

Т8

Т-34 85 in rust_offtopic
класть на эти стандарты
источник

RP

Roman Proskuryakov in rust_offtopic
Тебе говорят, что в С++ мув не деструктивный. А ты говоришь, что говно вкусное, если его поперчить.
источник

RP

Roman Proskuryakov in rust_offtopic
окей.
источник

CD

Constantine Drozdov in rust_offtopic
Roman Proskuryakov
я дочитал до "As discussed in EWGI at San Diego, this proposal does not give us a general user-provided "destructive move" facility." Этого достаточно.
Именно. Зато если внимательно прочитать этот proposal будет ясна причина провала всех подобных попыток, дело всё в том, что семантическая категория is_destructive_moveable для C++ в точности совпадает с категорией std::is_move_constructible_v
источник

RP

Roman Proskuryakov in rust_offtopic
Constantine Drozdov
Именно. Зато если внимательно прочитать этот proposal будет ясна причина провала всех подобных попыток, дело всё в том, что семантическая категория is_destructive_moveable для C++ в точности совпадает с категорией std::is_move_constructible_v
семантическая категория должна совпадать с невозможностью использовать переменную после вызова std::move, остальное - сахарок и линейные типы. что из этих слов тебе не ясно?
источник

CD

Constantine Drozdov in rust_offtopic
Roman Proskuryakov
семантическая категория должна совпадать с невозможностью использовать переменную после вызова std::move, остальное - сахарок и линейные типы. что из этих слов тебе не ясно?
это неверно
источник

Т8

Т-34 85 in rust_offtopic
Т-34 85
класть на эти стандарты
лучше изучать компиляторы
источник

CD

Constantine Drozdov in rust_offtopic
Roman Proskuryakov
семантическая категория должна совпадать с невозможностью использовать переменную после вызова std::move, остальное - сахарок и линейные типы. что из этих слов тебе не ясно?
ответ неожиданно содержится вот в этой строке
We define a new verb, "relocate," which is equivalent to a move and a destroy (analogous to the existing verb "swap," which is equivalent to a move, two move-assignments, and a destroy).
источник

Ct

Casual tears in rust_offtopic
Т-34 85
ты точно внимательно читал? Там написано, что если хочешь всегдп кидать ошибку при дереференсе 0, юзай -fno-delete-null-pointer-checks
> assume that a memory access to address zero always results in a trap
Как assume переводится знаешь надеюсь?
источник

Т8

Т-34 85 in rust_offtopic
Casual tears
> assume that a memory access to address zero always results in a trap
Как assume переводится знаешь надеюсь?
знаю. Читай дальше
источник

Т8

Т-34 85 in rust_offtopic
что за манера такая - вырывать из контекста?
источник

RP

Roman Proskuryakov in rust_offtopic
Constantine Drozdov
ответ неожиданно содержится вот в этой строке
We define a new verb, "relocate," which is equivalent to a move and a destroy (analogous to the existing verb "swap," which is equivalent to a move, two move-assignments, and a destroy).
Костя, ты там головой не ударился с утра? Тебе сказали, что в С++ нет деструктивного мува. Ты сказал, что он есть.
источник

RP

Roman Proskuryakov in rust_offtopic
Ало
источник

RP

Roman Proskuryakov in rust_offtopic
Очнись
источник

Ct

Casual tears in rust_offtopic
Т-34 85
знаю. Читай дальше
А что дальше?
источник

CD

Constantine Drozdov in rust_offtopic
Roman Proskuryakov
Костя, ты там головой не ударился с утра? Тебе сказали, что в С++ нет деструктивного мува. Ты сказал, что он есть.
дело всё в том, что семантическая категория is_swappable находится между категориями is_destructive_moveable и is_state_defined_moveable
источник

CD

Constantine Drozdov in rust_offtopic
подобная реализация swap является точным выражением is_swappable только в случае, если она использует destructive move
источник