如何强制,值成为左值引用?

Joj*_*ino 3 c++ templates lvalue function-templates c++11

我希望我的函数采用左值引用,而绝对不是右值临时或其他任何

这是我的功能:

template<class T>
void foo(T& value) {}

// Imagine I have a class Foo
struct Foo
{ 
   int a;
   int b;
};
Run Code Online (Sandbox Code Playgroud)

当我调用 时foo(Foo{1, 2}),首先,即使我要求左值引用,它也会编译,其次,它不起作用,因为foo存储了传递值的地址,所以我稍后阅读时会得到垃圾。

如何强制foo采用左值引用?

JeJ*_*eJo 6

首先,给定的代码默认不会在GCC 和 Clang 中编译,只能在具有非标准扩展名的 MSVC 中编译。

如果您想确保foo()不接受右值,只需delete重载

template<class T>
void foo(T&& value) = delete;
Run Code Online (Sandbox Code Playgroud)