если сделать что-то типа
void foo(std::string&& foo) {
std::cout << std::is_rvalue_reference_v<decltype(foo)> << std::endl;
}
то выведет 1
Но в таком случае:
void bar(std::string&& bar) {}
void foo(std::string&& foo) {
bar(foo); // error
std::cout << std::is_rvalue_reference_v<decltype(foo)> << std::endl;
}
Ошибка при вызове bar. Как это понимать? :D
foo локальная переменная
спасибо капитан очевидность
Ну так это не rvalue. Чего бы там ошибке не быть?
просто нужна вот такая конструкция для определения r-value (Вандевурд 2-е издание) void foo(std::string&& foo) { if constexpr (std::is_lvalue_reference_v<decltype((foo))>) { std::cout << "lvalue \n"; } else if constexpr (std::is_rvalue_reference_v<decltype((foo))>) { std::cout << "x-value \n"; } else { std::cout << "pr-value \n"; } } А именованный параметр функции всегда l-value
Обсуждают сегодня