
Azoyan
05.07.2018
09:41:00
Сейчас попробую ещё раз

Сергей
05.07.2018
09:43:00
@antoshkka в Parallelism 2, Reflection и Executors TS там описки: фицечки, type trits

Constantine
05.07.2018
09:43:16

Google

Constantine
05.07.2018
09:44:57
хотя в действительности я не понял, почему не std::atomic<T&>

Antony
05.07.2018
09:44:58

Constantine
05.07.2018
09:45:37

Azoyan
05.07.2018
09:47:49

Constantine
05.07.2018
09:48:32

Azoyan
05.07.2018
09:48:58
Хз, я люблю поупарываться)
В списках инициализации можно использовать тернарник если хочется и исключение выкинуть
Your welcome

Constantine
05.07.2018
09:50:10
Я не понял, как работает с пустым фрагментом в
? /*here*/ :

Azoyan
05.07.2018
09:50:47
Ох, я сам не понял. Опечатался

Constantine
05.07.2018
09:50:51
Я уж было решил что (int a = 0) ? : throw

Azoyan
05.07.2018
09:51:07
Только сейчас заметил

Constantine
05.07.2018
09:51:10
Но это не так работает

Google

Grigor
05.07.2018
09:51:19

Ilia
05.07.2018
09:51:28

Constantine
05.07.2018
09:51:43

Grigor
05.07.2018
09:51:53

Azoyan
05.07.2018
09:51:56
Это баг?

Constantine
05.07.2018
09:52:00
окай

Antony
05.07.2018
09:52:16

Constantine
05.07.2018
09:53:05
Обе ветки вычисляются

Azoyan
05.07.2018
09:54:08

Ilia
05.07.2018
09:54:52

Max
05.07.2018
10:01:17

Ilia
05.07.2018
10:01:48

Azoyan
05.07.2018
10:02:10

Max
05.07.2018
10:03:24

Constantine
05.07.2018
10:05:22

Azoyan
05.07.2018
10:05:39
ЕЕЕЕ !

Constantine
05.07.2018
10:06:04
https://stdcpp.ru/proposals/eed5c3df-f062-4124-a5ed-3396a1480b95
а почему столько плюсов? это же вроде просто сокращающий буквы кода сахар

Grigor
05.07.2018
10:06:05

Max
05.07.2018
10:06:45
вот это поворот.
а зачем его создавать? Достаточно того, что типы выражений совпадают. Но вот выше пишут, что такие рассуждения не работают)

Google

Azoyan
05.07.2018
10:06:53

Ilia
05.07.2018
10:08:05

Azoyan
05.07.2018
10:08:13
ну окей
не пользуйтесь тернарниками, пожалуйста :)

Ilia
05.07.2018
10:09:08
Чёйта?

Constantine
05.07.2018
10:09:13
https://stdcpp.ru/proposals/431634d3-ce75-46de-9644-75ed4562747a
@antoshkka а нельзя это разрулить на уровне контракта T для shared_ptr<T> ?

Anatoly
05.07.2018
10:09:53

Ilia
05.07.2018
10:10:22
Это ты мне, старому Сшнику говоришь не пользоваться тернарником?
ДА Я ТЕБЯ....

Azoyan
05.07.2018
10:11:27
во! спасибо

Constantine
05.07.2018
10:16:14

Antony
05.07.2018
10:16:33

Azoyan
05.07.2018
10:16:44

Constantine
05.07.2018
10:17:08

Antony
05.07.2018
10:17:45

Azoyan
05.07.2018
10:18:01

Constantine
05.07.2018
10:18:18

Ilia
05.07.2018
10:28:23

Antony
05.07.2018
10:28:52

Google

Ilia
05.07.2018
10:29:36

Nikita
05.07.2018
10:30:20
А почему статья Антона на хабре ещё не в закрепе?))

Ilia
05.07.2018
10:30:51

Antony
05.07.2018
10:31:41

Azoyan
05.07.2018
10:31:42

Ilia
05.07.2018
10:32:51

Nikita
05.07.2018
10:33:52
лайков мало )
Блин название статьи такое волнующее чтоли
Раньше думал мол "блин как же медленно развиваются плюсы"
А сейчас: ещё не успел толком потрогать C++17, а уже "C++20 на подходе"

Azoyan
05.07.2018
10:34:23

Ilia
05.07.2018
10:35:03

Azoyan
05.07.2018
10:35:16

ShadoWalkeR
05.07.2018
10:36:25

Max
05.07.2018
10:38:07

Artem
05.07.2018
10:41:55
А это всё не выражается в рамках metaclasses proposal?

Constantine
05.07.2018
10:46:13
Не, не очень получится.
Представьте, что у вас есть объект, внутри которого уже есть подсчёт ссылок (нвапример объект из v8, или из другого языка со сборщиком мусора, или вы сами сделали такой объект и покомпактнее расположили там счётчики ссылок).
Если вы указатель на подобный объек скормите shared_ptr, то shared_ptr проаллоцирует вспомогательную структуру, в которой будет хранить счетчики ссылок. Вам же хочется, чтобы shared_ptr использовал именно ваши счётчики, и ничего лишнего не аллоцировал
Я имею в виду, что instrusive_ptr будет по сути shared_ptr<T> с каким-то условием на T (например, если T наследует enable_intrusive_from_this<typename Deleter>)

Antony
05.07.2018
10:51:35

Constantine
05.07.2018
10:54:01

Antony
05.07.2018
10:56:02


Constantine
05.07.2018
11:00:46
Переслал ваши слова автору предложения. Он сказал что попробует это реализовать в ближайшее время
Здесь самое сложное это определить критерии. У меня в проекте со времен С++03 есть велосипед с базовым классом для аналога intrusive_ptr, вот непонятно, разрешить ли мне использовать его (т.е. делать trait-ы / проверку концепта на T)
Кроме того, видимо, сломается pointer_cast, если T уходит к предку, который еще не поддерживает внутренний счетчик ссылок
Мой личный опыт использования intrusive не встречал этих проблем. Intrusive использовался в основном ради идеального shared_from_this
И да, вопрос в тему, имеет перспективу?
namespace std {
template <typename T>
std::shared_ptr<T> shared_from(T& t) {
return static_pointer_cast<T>(t.shared_from_this()):
}
}

Dmitry
05.07.2018
11:11:03

Constantine
05.07.2018
11:12:42

Google

Nikita
05.07.2018
11:12:52
О_о а как это вообще будет работать?
struct X {
// ...
std::strong_equality operator<=>(const X&, const X&) = default;
// ...
};
...
template <X x>
struct x_as_template_param {
// ...
};

Dmitry
05.07.2018
11:13:41

Nikita
05.07.2018
11:13:56
типо инстанс класса это же объект времени выполнения, как он будет разруливаться в шаблонном параметре?

Constantine
05.07.2018
11:14:34

Nikita
05.07.2018
11:15:21
А ещё, как такой шаблон специализировать (если это вообще можно будет)

Constantine
05.07.2018
11:17:44
но без универсальной реализации это другой intrusive_ptr, т.е. вопрос о usecase
и да, эту проблему можно разрулить на trait-ах для shared_ptr
правда, здесь trait по incomplete type и это опасно, но это такое

Dmitry
05.07.2018
11:24:02
Т.е. что то вроде if intrusive counted<T> using shared_ptr = intrusive_ptr

Constantine
05.07.2018
11:25:04
На самом деле внутри shared_ptr просто идет перегрузка ref/unref по трейту T
И касты проверяются на совместимость

Dmitry
05.07.2018
11:25:39
Но счётчик одного типа.