#include <iostream>
struct Box
{
Box() { std::cout << "constructor called" << std::endl; }
Box(const Box&) { std::cout << "Copy constructor called" << std::endl; }
Box(Box&&) { std::cout << "Move constructor called" << std::endl; }
void run() const { std::cout << "Run" << std::endl;}
};
int main()
{
Box a(Box());
a.run();
}
(demo)
In the above code I was expecting either Copy Constuctor
or Move Constructor
to be called on passing anonymous object Box()
as argument. But none of them were called. Reason probably might be copy elision
. But even constructor is not called for anonymous object A()
. Actually, the above code does not compile and on calling run()
function compiler gave following error.
a.cpp: In function ‘int main()’:
a.cpp:28:7: error: request for member ‘run’ in ‘a’, which is of non-class type ‘Box(Box (*)())’
a.run();
So when we type Box a(Box())
what is happening? What is being created?