Когда передается параметр, я хотел бы провести различие между этими двумя случаями в качестве параметра функции, например:Как distiguish между RValue и RValue ссылки в качестве параметра функции
int rvalue();
int&& rvalue_ref();
f(rvalue());
f(rvalue_ref());
Однако, когда я пытаюсь с переадресацией таких ссылок:
int rvalue()
{
return 1;
}
int&& rvalue_ref(int i)
{
return std::move(i);
}
template<class T>
void f(T&& x)
{
if (std::is_rvalue_reference<T>())
{
std::cout << "Rvalue reference" << std::endl;
}
else if (std::is_lvalue_reference<T>())
{
std::cout << "Lvalue reference" << std::endl;
}
else
{
std::cout << "Not a reference" << std::endl;
}
}
int main()
{
f(rvalue()); // Should print "Not a reference"
f(rvalue_ref(1)); // Should print "Rvalue reference"
}
В обоих случаях печатается «Не ссылка». Есть ли способ отличить оба случая от C++?
Почему вы хотите отличить эти два случая в первую очередь? –
Вы, похоже, действительно задаетесь вопросом, как вести себя по-разному для аргумента xvalue, чем аргумент prvalue –
Ха-ха, я вызвал внутреннюю ошибку компилятора в g ++ 5.2 при попытке чего-то –