如何强制,价值成为左值参考?

How to force, value to be lvalue reference?

我希望我的函数采用 lvalue 引用,绝对不是 rvaluetemporary 或其他什么。

这是我的功能:

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

// Imagine I have a class Foo
struct Foo
{ 
   int a;
   int b;
};

当我调用 foo(Foo{1, 2}) 时,首先,即使我要求 lvalue 引用,它也会编译,其次,它不起作用,因为 foo 存放的是传值的地址,所以我后面读的时候是乱码。

如何强制foo取一个左值引用?

首先,给定的代码在GCC and Clang, only in MSVC with non-standard extensions中默认不会编译。

如果您想确保 foo() 不接受右值,只需 delete that overload:

template<class T>
void foo(T&& value) = delete;