@ProCxx

Страница 2322 из 2477
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
static_cast -1 в unsigned это unspecified вроде
почему? https://en.cppreference.com/w/cpp/language/implicit_conversion это integer conversion в usigned -> по модулу 2^n завраппится

Aidar
04.09.2018
13:23:16
почему? https://en.cppreference.com/w/cpp/language/implicit_conversion это integer conversion в usigned -> по модулу 2^n завраппится
↑ This only applies if the arithmetic is two's complement which is only required for the exact-width integer types. Note, however, that at the moment all platforms with a C++ compiler use two's complement arithmetic

по стандарту это 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

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
Что значит вопрос "для чего"? Глубокий смысл "последнее использование переменной"
"Для чего" то и означает: для чего он? Я правильно понял, что это, например, позволяет в compile time удостовериться, что к "moved out" переменной дальше нет обращений? Это все?

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
Надо тогда [[undeclare]]
Атрибуты не должны влиять на компилируемость приложения

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

Antony
04.09.2018
16:15:38
Вот есть мнение, что на самом деле есть move, есть forward и есть undeclare, который похож на forward, только чаще применим
Яб назвал его transfer а не undeclare. Мы именно целиком передаём владение объектом

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
Ошибка компиляции.
smth всегда фолсит

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

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

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 :)

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

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

Google
Alexander
04.09.2018
16:56:47
!move!constexpr
Ты слышал видать про constexpr!

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

Alexander
04.09.2018
16:57:10
carry?
Mid. Не удержался

Дед Пегас
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
здесь надо что-то наукоемкое... что-то вроде аннигиляции

Страница 2322 из 2477