#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?