I am having a hard time understanding why std::move() with object literals doesn't work.
Given the following simple code:
#include <memory>
#include <vector>
class A{
};
void func(A &¶m1){
}
int main()
{
auto a = std::unique_ptr<A>(new A());
auto vec = std::vector<std::unique_ptr<A>>{std::move(a)}; //this code does not work!!
//std::vector<std::unique_ptr<A>> vec; // but this code works
//vec.push_back(std::move(a));
return 0;
}
Since C++20, push_back() is defined as constexpr:
constexpr void push_back( T&& value );
Shouldn't std::move() work the same in both object literal vector initialization and using push_back()?