нет, оно будет работать как обычный auto&& за исключением одного нюанса в выводе типов - если справа T&& то в результате будет T
Чаво
вообще имо фигня, было б круто иметь дедакт гайды для алиасов и делать remove_rvalue_reference_t x = foo();
это решило* бы проблемы с айгеном, где auto не конвертит експрешшн темплейт в значение
Но не соглашусь что этот частный случай фигня потому что это давняя и фундаментальная проблема которая тянется с самого первого С++98 стандарта. Попробуй найти в этом примере UB #include <cstring> const char* max(const char* a, const char* b) { return std::strcmp(b, a) < 0 ? a : b; } template <typename T> const T& max(const T& a, const T& b, const T& c) { return max(max(a, b), c); } int main() { const char* s1 = "frederic"; const char* s2 = "anica"; const char* s3 = "lucas"; auto m2 = max(s1, s2, s3); } И эту проблему могли бы решить еще в С++11 стандарте (вместе с добавлением rvalue-ссылок) но почему-то не захотели.
ну он фигня потому что он не решает много случаев
те же експиешшн темплейты точно так же не работают как и не работали
expression templates паттерн? а что за проблема там?
auto x = a+make_bar()*b; //попытка использовать x будет всегда провальна тк резкльтат make_bar будет уже удален
все потому что x имеет тип експрешшн темплейт, а не результат вычисления експрешшн темплейта
А тут разве не будет warning про возврат ссылки на локальную переменную?
Обсуждают сегодня