If you add 'explicit' to a constructor with >1 non-defaulted parameters, the style checker should complain. There's no point having explicit in that case. Good: explicit Foo(); explicit Foo(const String&); explicit Foo(const String&, bool something = false); Bad: explicit Foo(Bar, Baz)