
Oleg
04.09.2018
13:16:23
а что тогда вообще можно сделать?
https://dxr.mozilla.org/mozilla-central/source/media/webrtc/signaling/src/sdp/sipcc/sdp_token.c#87-90
вот такая проверка на стороне firefox
А библиотека, которая заполняет это поле, берет его из unsigned long long

Google

Spoonson
04.09.2018
13:21:26

Aidar
04.09.2018
13:23:16
по стандарту это unspecified

Spoonson
04.09.2018
13:27:35
но это же про sign-extended, нет? а предложение выше остается в силе даже не в two complement
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0907r1.html плюс если говорить то вроде эту бумагу приняли
https://twitter.com/jfbastien/status/989242576598327296 ну ток в с++20 конечно да

Constantine
04.09.2018
15:55:55
А здесь не было фанатов undeclare operator? Который там forward делает и переменную разобъявляет?
Видимо, перегрузка такого оператора (с запретом перемещения типа std::move) позволяет делать not nullable unique ptr

Ilia
04.09.2018
16:06:13

Andrew
04.09.2018
16:07:45

Constantine
04.09.2018
16:08:25
А зачем?
Вот теперь есть аргумент зачем: это принципиально отдельный тип перемещения

Andrew
04.09.2018
16:09:28

Constantine
04.09.2018
16:09:55

Andrew
04.09.2018
16:12:13

Google

Aidar
04.09.2018
16:12:16
} // undeclare

Antony
04.09.2018
16:13:31
А для чего он? И в чем его глубокий смысл?
Сделать move семантику как в Rust. После std::true_move переменную никак нельзя будт использовать, любая попытка к ней обратиться - будет ошибкой на этапе компиляции. Позволит например вот тут https://github.com/apolukhin/dmn/blob/master/src/impl/node_parts/write_n.hpp#L157-L160 лучше проверять на этапе компиляции и лучше переиспользовать компилятору стек

Aidar
04.09.2018
16:13:50
Надо тогда [[undeclare]]
И онли как хинт

Antony
04.09.2018
16:14:11

Aidar
04.09.2018
16:14:50

Matwey
04.09.2018
16:15:07

Constantine
04.09.2018
16:15:08

Aidar
04.09.2018
16:15:18
Все равно старперам из компиляторов это не понравится делать

Antony
04.09.2018
16:15:38

Дед Пегас
04.09.2018
16:16:56
Где подписаться?

Aidar
04.09.2018
16:18:03

Antony
04.09.2018
16:18:07
Закиньте идею на stdcpp.ru
Если готовы взяться - всячески помогу, но проработать краевые случаи и накидать черновик предложения - с вас
Особенно надо проработать ситуации void foo(something& v) { auto new_v = std::transfer(v); /*...*/ }

Aidar
04.09.2018
16:19:19
if(smth){
foo(transfer(bar));
}
bar.smth();
Ожидаемое поведение какое?

Дед Пегас
04.09.2018
16:19:29

Antony
04.09.2018
16:19:43

Google

Aidar
04.09.2018
16:20:00

Дед Пегас
04.09.2018
16:20:19
Не должно быть такого поведения.

Aidar
04.09.2018
16:20:23
Ну да наверн это правильно

Constantine
04.09.2018
16:30:33

Matwey
04.09.2018
16:38:09
на мой взгляд transfer неудачное название, оно никак не подчеркивает тот факт, что то место откуда мы делаем transfer вообще исчезло

Antony
04.09.2018
16:41:47
teleport ?

Matwey
04.09.2018
16:42:16
не, телепорт предполагает что есть точка А и точка Б и мы передаем что-то между ними. А тут мы не просто передаем, а еще и точка А исчезает из бытия
Что-то типа replace_by хочется придумать, но у меня нет годных идей
Или rename
Что-то такое

Aidar
04.09.2018
16:43:39
gift()

Alexander
04.09.2018
16:43:44
Move!

Aidar
04.09.2018
16:44:07
!move!constexpr

Matwey
04.09.2018
16:44:24
А в комитете нет профессионального лингвиста? Чтобы придумывал названия

Aidar
04.09.2018
16:45:29
Го лучше оператор придумаем
Foo foo;
bar($foo)
Класс
Типа продал

Matwey
04.09.2018
16:46:41
Так придумано уже всё
bar <- foo

Google

Matwey
04.09.2018
16:46:59
украдем из R присваивание, чо

Aidar
04.09.2018
16:47:17
bar(<- foo);
auto$ bar=$foo;
Кстати
FOO&& f=transfer(bar);
bar.test();
Какое ожидаемое поведение?

Matwey
04.09.2018
16:50:19
ошибка компиляции же
нет?
squash еще интересное название, но мне тоже не нравится

Aidar
04.09.2018
16:51:10
А
auto& bar2=bar;
FOO&& f=transfer(bar);
bar2.test();
?

Matwey
04.09.2018
16:51:58
Тоже. Я так понимаю, что основная сложность - описать все вот подобные случаи.
И с указателями очевидно не будет работать без borrow checker

Aidar
04.09.2018
16:52:12
А если я внутрь класса ссылку сохраню?

Matwey
04.09.2018
16:52:43
Ну, т.е.
Foo* x = &bar;
Foo f = transfer(bar);
*x; // UB
И вот такое всякое будет плохо получаться

Aidar
04.09.2018
16:52:53
Ну типа в таком контексте выглядит как кучка эвристик которые ничего толком не дают чуть глубже чем описано в бумаге

Дед Пегас
04.09.2018
16:54:00
Трансфер вполне ок

Aidar
04.09.2018
16:54:21

Дед Пегас
04.09.2018
16:54:42
std::trans :)

Алексей
04.09.2018
16:54:47

Aidar
04.09.2018
16:54:51
Имхо ваще перемещение первично а копирование вторично, к тому же чем дороже тем больше писать должно быть а не наоьорот

Дед Пегас
04.09.2018
16:56:38
carry?

Google

Alexander
04.09.2018
16:56:47

Дед Пегас
04.09.2018
16:57:08
Будем как кононичнве плюсачи

Alexander
04.09.2018
16:57:10

Дед Пегас
04.09.2018
16:57:22
Мув не перемещает, карри не карирует

Anatoly
04.09.2018
16:57:36
hide

Aidar
04.09.2018
16:57:43
Шутка про static который неявно extern

Дед Пегас
04.09.2018
16:58:41
ship

Anatoly
04.09.2018
16:58:46
Сокрытие переменной std::hide с передачей состояния
Это отражает то, что произойдет с переменной
Она перестанет быть доступной

Valentin
04.09.2018
17:25:11
force_hided_move

Igor
04.09.2018
17:44:30
А чем undeclare не понравился то? я не понял

Matwey
04.09.2018
17:47:38
Ну Атону не понравился undeclare, а мне в ответ не понравился transfer... И тут всё как закрутилось

Anatoly
04.09.2018
17:50:01
здесь надо что-то наукоемкое... что-то вроде аннигиляции