get_bool(bool def = false) const { return _get(std::move(def)); }
Только если _get принимает bool&&, что не имеет практического смысла
template<typename T, typename U = T> U _get(T &&def) const { if (auto *ptr = std::get_if<U>(this)) return *ptr; else return std::move(def); }
Здесь _get принимает bool&, если передать просто def, так что всё хорошо. А вот std::move(def) — очень подозрительно
Ну видимо U может быть другого типа поэтому и std::move, хотя хз странная тема мувать переданные параметры по ссылке
получается _get мувает этот бул обратно в вызывающую функцию, а оттуда он уже возвращается по значению?
Принимаемый тип от U не зависит, так U здесь ничего не меняет
Всё очень сложно. Возвращаемый тип U по воле случая может оказаться ссылочным, а может не оказаться, этот код довольно ненадёжен
а если в _get передать lvalue, амперсанды схлопнутся, и def будет иметь тип T&? это оно? (универсальная ссылка)
Блин НЕТ СМЫСЛА ПЕРЕМЕЩАТЬ ВСТРОЕННЫЕ ТИПЫ!
Тут какая-то сложная логика шаблонная
Ну, это понятно.
Обсуждают сегодня