Container::Container()
{
    std::cout << "CTOR called" << std::endl;
}
Container::Container(Container&& other)
{
    std::cout << "Move CTOR called" << std::endl;
}
and
Container getContainer() {
    Container a{};
    return std::move(a);
}
int main() {
    Container a = getContainer();
}
Whenever I compile/run this with MSVC I get the following result:
CTOR called
Move CTOR called
The return type of getContainer() is Container and not Container& or Container&&, and so whenever I inspect the value category of the expression getContainer() as describted here it yields prvalue, so Container a = getContainer(); means Container a = prvalue;, so how to does the compiler know to treat getContainer() as a xvalue and therefore invoking the move constructor?
Aucun commentaire:
Enregistrer un commentaire