#include struct A { A() {} A(const A& a) { std::cout << "COPY CONSTRUCTOR" << std::endl; } void operator=(const A& a) { std::cout << "ASSIGNMENT OPERATOR" << std::endl; } }; int main(int argc, char** argv) { A a1; // calls copy constructor // This is initialization not assignment! A a2 = a1; // calls assignment operator a2 = a1; return 0; }