Size: a a a

2020 October 20

m

magras in pro.cxx
Dmitry Sokolov
Точно так же можно туда засандалить is_partial detection. Чтобы const снять с итераторов.
Что-то в этом есть.
источник

DS

Dmitry Sokolov in pro.cxx
magras
хм. Спасибо. Надо будет еще раз посмотреть как это работает.
Это очччень полезная штука, например поиск по string_view когда ключ string и т.п. Я их вообще затайпдефил сразу, transparent_map/transparent_set.
источник

DS

Dmitry Sokolov in pro.cxx
Нужен proposal в 23.
источник

DS

Dmitry Sokolov in pro.cxx
Comparator::is_partial как признак non-const для set::iterator.
источник

DS

Dmitry Sokolov in pro.cxx
Кстати, интересно чокак с transparent Equal/Hash?
источник

SS

Sergey Sobolev in pro.cxx
Dmitry Sokolov
Кстати, интересно чокак с transparent Equal/Hash?
вроде в 20 появились
источник

ПК

Побитый Кирпич... in pro.cxx
Dmitry Sokolov
Extract это потенциально перебалансировка. Последующая вставка это logn + опять потенциально перебалансировка. Вообще избыточна эта const'овость итераторов на мой взгляд. Всё равно есть много способов отстрелить ногу :) нетранзитивный компаратор, mutable, сравнение через указатели...
это гораздо сложнее, чем на ровном месте инты поменять в std::set<int>
источник

DS

Dmitry Sokolov in pro.cxx
Побитый Кирпич
это гораздо сложнее, чем на ровном месте инты поменять в std::set<int>
Это ровно то же самое, просто за вычетом allocate/deallocate.
источник

ПК

Побитый Кирпич... in pro.cxx
Dmitry Sokolov
Это ровно то же самое, просто за вычетом allocate/deallocate.
нет, это проще
источник

DS

Dmitry Sokolov in pro.cxx
Побитый Кирпич
нет, это проще
Ну условно erase это extract + drop node. Insert это create node/find insert point/insert/rebalance. Убираются только drop/create node.
источник

ПК

Побитый Кирпич... in pro.cxx
Dmitry Sokolov
Ну условно erase это extract + drop node. Insert это create node/find insert point/insert/rebalance. Убираются только drop/create node.
А, я про неконстантный итератор имел ввиду
источник

DS

Dmitry Sokolov in pro.cxx
Побитый Кирпич
А, я про неконстантный итератор имел ввиду
Ну я ж говорю, согласен, пусть будет const, шикарный вариант это протащить условно мутабельность через трейты компаратора.
источник

DS

Dmitry Sokolov in pro.cxx
Нода частично мутабельна если она является ключом лишь частично. В этом случае set почти наверняка будет использовать transparent компаратор (ибо зачем для поиска создавать полную ноду?). Если при этом компаратор заодно разрешит мутабельность ноды, нехай стреляют же, дело личное.
источник

O

Ofee in pro.cxx
Понадобилась реализация is_nothrow_invocable_r для C++11, за основу для реализации взял этот C++20 пример, но столкнулся при реализации с проблемой:

struct bar { bar(int) noexcept; };
static_assert(noexcept(std::declval<void(&)(bar) noexcept>()(42)), "");

В C++17 проверка ожидаемо проходит, а в C++14 — нет. Что-то поменялось в стандарте на этот счёт? (Думаю, что это "The noexcept-specification is a part of the function type and may appear as part of any function declarator (since C++17)")

Будет ли корректной следующая замена или я что-то важное упускаю?

static_assert(noexcept(static_cast<To>(std::declval<From>())), "");
источник

NV

Nik Vzdornov in pro.cxx
disba1ancer
Статья, имхо, не очень, я в неё очень долго въезжал, в итоге нашёл статью в каком-то блоге на англ и только тогда стало яснее
))) ок, поделитесь тогда, не будет лишним ещё одно мнение узнать
источник

АК

Александр Караев... in pro.cxx
Ofee
Понадобилась реализация is_nothrow_invocable_r для C++11, за основу для реализации взял этот C++20 пример, но столкнулся при реализации с проблемой:

struct bar { bar(int) noexcept; };
static_assert(noexcept(std::declval<void(&)(bar) noexcept>()(42)), "");

В C++17 проверка ожидаемо проходит, а в C++14 — нет. Что-то поменялось в стандарте на этот счёт? (Думаю, что это "The noexcept-specification is a part of the function type and may appear as part of any function declarator (since C++17)")

Будет ли корректной следующая замена или я что-то важное упускаю?

static_assert(noexcept(static_cast<To>(std::declval<From>())), "");
До C++17 noexcept не входил в сигнатуру функции. Поэтому по сигнатуре не узнать, является ли функция noexcept
источник

АК

Александр Караев... in pro.cxx
Вот по выражению можно узнать - noexcept(foo(1, 2, 3)). Так что замена выглядит корректной
источник

O

Ofee in pro.cxx
Александр Караев
Вот по выражению можно узнать - noexcept(foo(1, 2, 3)). Так что замена выглядит корректной
Во всех найденных мной реализация использованы более сложные синтаксические конструкции, чем static_cast. Полагаю, это как-то связано с формулировкой стандарта:
The predicate condition for a template specialization is_convertible<From, To> shall be satisfied if and only if the return expression in the following code would be well-formed, including any implicit conversions to the return type of the function:
 To test() {
   return declval<From>();
 }
Но я, тем не менее не знаю, в чём принципиальное отличие этой функции от static_cast<To>(declval<From>()). На ум приходят какие-то мысли об RVO или поведении деструктора, но, кажется, мне не хватает понимания
источник

C

CuBeR116 in pro.cxx
Ребят, привет, только только начинать писать на крестах. Вопрос возник, можно ли тип переменной задать с помощью другой переменной?

Например
string type = "int";
<type> value = 5;


string type = "string";
<type> value = "asd";
источник

DC

Denis Chernikov in pro.cxx
CuBeR116
Ребят, привет, только только начинать писать на крестах. Вопрос возник, можно ли тип переменной задать с помощью другой переменной?

Например
string type = "int";
<type> value = 5;


string type = "string";
<type> value = "asd";
1) можно
2) @supapro
3) decltype(type) value = "str";
источник