Question

I'm unsure why the following code works (VC++ 2013):

void Foo(std::vector<int> &v) { }

In main:

std::vector<int> v;
Foo(std::move(v));

Because there is no Foo defined which takes an rvalue parameter or a const lvalue reference I was under the impression the above code would fail to compile. What is going on?

Thank you

Was it helpful?

Solution

That code cannot work. It must horribly break under any standard-conforming compiler. You're trying to initialize a non-const reference to an lvalue from an rvalue. Nope, won't work.

It is to be noted that both GCC and Clang reject it.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top