Size: a a a

2020 April 16

AD

Andrey Davydov in pro.cxx
Mikhail Demchenko
Подскажите, почему код при определённом FAIL_ не компилится, я ожидаю от std::optional поведения чуть более умного стораджа: https://godbolt.org/z/T3CrNx
потому что is_copy_constructible_v<callable_with_members<long long>> == false
источник

ПК

Побитый Кирпич in pro.cxx
Чем rvalue отличается от lvalue?
источник

AT

Alexander T in pro.cxx
Побитый Кирпич
Чем rvalue отличается от lvalue?
отношением аллаха
источник

АК

Александр Караев in pro.cxx
Andrey Davydov
потому что is_copy_constructible_v<callable_with_members<long long>> == false
а я правильно понимаю, что semiregular-box из ranges как раз эквивалент optional<>, не обладающий таким требованием, т.к. вместо копирования значения поверх имеющегося сбрасывается до пустого состояния и заново конструирует
источник

AD

Andrey Davydov in pro.cxx
Александр Караев
а я правильно понимаю, что semiregular-box из ranges как раз эквивалент optional<>, не обладающий таким требованием, т.к. вместо копирования значения поверх имеющегося сбрасывается до пустого состояния и заново конструирует
Я открываю https://en.cppreference.com/w/cpp/ranges/semiregular_wrapper и второй же строчкой вижу requires std::copy_constructible<T> ...
источник

АК

Александр Караев in pro.cxx
Andrey Davydov
Я открываю https://en.cppreference.com/w/cpp/ranges/semiregular_wrapper и второй же строчкой вижу requires std::copy_constructible<T> ...
Действительно, там речь про operator=, перепутал
источник

D

Danya in pro.cxx
vehlwn
Прата. C++ Premier.
источник

v

vehlwn in pro.cxx
Тогда Страус Язык... и Принципы...
источник

v

vehlwn in pro.cxx
>difficult concepts
Звучит сомнительно. Как будто с++ простой.
источник

v

vehlwn in pro.cxx
>задания после каждой главы
>Has poor practices
источник

MD

Mikhail Demchenko in pro.cxx
Подскажите, не работоспособность case0 и case2 мне кажется просто багом в языке https://godbolt.org/z/ed2dpk . Есть ли какое-либо обоснование, почему там должно быть произведено копирование? По определению - moved-from state является не досягаемым для клиента состоянием, так что копирование может быть просто опущено, и скажем просто переназначены ссылки для локального объекта.
источник

NP

Nikita Provotorov in pro.cxx
Mikhail Demchenko
Подскажите, не работоспособность case0 и case2 мне кажется просто багом в языке https://godbolt.org/z/ed2dpk . Есть ли какое-либо обоснование, почему там должно быть произведено копирование? По определению - moved-from state является не досягаемым для клиента состоянием, так что копирование может быть просто опущено, и скажем просто переназначены ссылки для локального объекта.
Компилятор ведь не генерирует конструкторы от const rvalue reference
источник

NP

Nikita Provotorov in pro.cxx
Поэтому и выбирается ближайший подходящий - const lvalue reference
источник

MD

Mikhail Demchenko in pro.cxx
Nikita Provotorov
Компилятор ведь не генерирует конструкторы от const rvalue reference
Вот в этом есть, как мне кажется, недочёт со стороны языка
источник

MD

Mikhail Demchenko in pro.cxx
Явно для такого случая сгенерированный конструктор от rvalue reference не сильно отличается от такового для const rvalue reference, особенно учитывая, что конструируется объект с const квалификатором
источник

АК

Александр Караев in pro.cxx
Mikhail Demchenko
Вот в этом есть, как мне кажется, недочёт со стороны языка
призываю @webreh , он особенно не любит const&&
источник

NP

Nikita Provotorov in pro.cxx
Mikhail Demchenko
Вот в этом есть, как мне кажется, недочёт со стороны языка
А мне вот кажется, что все логично.
Rvalue reference указывает на объект который уже не нужен и скоро помрет и позволяет пользователю делать что угодно с этим объектом (главное, после всех манипуляций оставить его в “разрушаемом” состоянии), обычно это подразумевает вытягивание всего внутреннего состояния в другой объект.
Но что по такой идеологии можно сделать с const rvalue reference? Ничего, ведь состояние этого временного объекта то поменять нельзя. Фактически ситуация становится аналогичной ситуации с const lvalue reference, так собсна зачем генерировать тогда дополнительный конструктор?
источник

MD

Mikhail Demchenko in pro.cxx
Я скорее за конструктор вида: T(const T&&) const noexcept в данном случае, он бы мог означать продолжение жизни объекта, но под другим именем
источник

MD

Mikhail Demchenko in pro.cxx
Фактически проблема возникает только тогда, когда T содержит rvalue reference члены
источник

MD

Mikhail Demchenko in pro.cxx
Что, по какой-то причине (до которой сейчас уже не могу догадаться, башка дырявая) прямо сильно отличается от случая с lvalue reference членами. Прошу подсказки!
источник