Size: a a a

2020 May 29

AD

Andrey Davydov in pro.cxx
Думаю, никак
источник

YB

Yarique Belgorodsky in pro.cxx
Andrey Davydov
Это плохой способ защиты, я все равно вызову вашу функцию от lvalue: https://gcc.godbolt.org/z/ivXDbN
а так https://gcc.godbolt.org/z/atAFCs не вызовешь же?
источник

N

Neargye in pro.cxx
Yarique Belgorodsky
а так https://gcc.godbolt.org/z/atAFCs не вызовешь же?
Да это и обсудили, тут 2 перегрузка не нужна
источник

N

Neargye in pro.cxx
Andrey Davydov
Думаю, никак
Ну я не спорю, что с С++20 можно делать все чише
Но интернал в команде, где специально ломать все не будут, получить ошибку и подумать что ты что-то не так делаешь сойдет
источник

АР

Андрей Руссков... in pro.cxx
да блин с универсальными ссылками вообще сложно делать "чисто"
источник

АР

Андрей Руссков... in pro.cxx
точнее можно, там, где нужны универсальные ссылки
источник

YB

Yarique Belgorodsky in pro.cxx
Neargye
Да это и обсудили, тут 2 перегрузка не нужна
лучше удалить лишнюю реализацию, чтобы читабельнее было на старых стандартах, имхо
https://gcc.godbolt.org/z/9vKcEw
источник

АР

Андрей Руссков... in pro.cxx
и больно там где они на самом деле не нужны
источник

AP

Antony Polukhin in pro.cxx
Очень больно, что синтаксис forwarding reference очень совпадает с синтаксисом rvalue reference. И без контекста не понятно что к чему
источник

AP

Antony Polukhin in pro.cxx
Andrey Davydov
Передавайте привет и наилучшие пожелания автору вопроса про rvalue_t в квизе — ответ неправильный, type alias-ы абсолютно прозрачны.
спасибо что заметили! Поправили на
      template <class T, class = std::enable_if_t<
         std::is_rvalue_reference_v<T&&>
     >>
     using rvalue_t = T&&;
источник

D

Dmitriy in pro.cxx
Вопрос по CRTP
Есть некий
 template<class Ty>
class Parent : public Base {
public:
using Data = typename Ty::DataType;
Parent(Data data)
      : storage {data} {}
protected:
Data storage;
А так же
class Derived: public Parent<Derived> {
public:
using DataType = int;
Derived(int num)
     : Parent<Derived>(num) {}
}
Компиль ругается на "невозможность преобразовать int в  const Parent<Derived>&"
(Там не int, а еще один шаблон, но не работает даже с int)

Определено, что не распознается
typename Ty::DataType
Как можно решить проблему?
источник

OS

Oleksandr Senkovych in pro.cxx
Derived это incomplete type когда инстанциируется Parent
источник

OS

Oleksandr Senkovych in pro.cxx
решается это дополнительным параметром Parent'a
источник

AP

Antony Polukhin in pro.cxx
Стоит вынести конструктор Derived наружу, за };
источник

AP

Antony Polukhin in pro.cxx
За пределами }; класс Derived будет уже complete
источник

OS

Oleksandr Senkovych in pro.cxx
это если тебе не нужен этот typedef в пределах обьявления класса Parent
источник

OS

Oleksandr Senkovych in pro.cxx
часто он как раз нужен
источник

D

Dmitriy in pro.cxx
Oleksandr Senkovych
это если тебе не нужен этот typedef в пределах обьявления класса Parent
В Parent есть поле такого типа, в которое конструктор поместит данные, так что typedef нужен
источник

D

Dmitriy in pro.cxx
Antony Polukhin
Стоит вынести конструктор Derived наружу, за };
Спасибо, попробую
источник

AM

Alexander Malkov in pro.cxx
Antony Polukhin
спасибо что заметили! Поправили на
      template <class T, class = std::enable_if_t<
         std::is_rvalue_reference_v<T&&>
     >>
     using rvalue_t = T&&;
кстати, еще момент..
Вопрос 7 из 8:

Какой тип получится у x в результате выполнения:
int i;
auto x = std::make_tuple(std::ref(i), std::cref(i));


Затем идет 8й вопрос, тот же самый, только с указанным стандартом C++17.
Чудно получается, а если я на этот вопрос отвечал уже с корреляцией на 17 стандарт?
источник