#include struct foo { foo() : val(0) {} foo(int x) : val(x) {} int val; }; struct bar { bar() : val(0) {} explicit bar(int x) : val(x) {} int val; }; int main(int argc, char** argv) { // call converting constructor for foo foo f = 3; std::cout << f.val << std::endl; // must cast to call converting cnostructor for bar, because it is declared explicit bar b = static_cast(5); std::cout << b.val << std::endl; return 0; }