Great answers from @StoryTeller and @Sneftel are the main reason. However, IMHO, this makes sense (at least I do it), as part of a future check later changes the code. Consider your example:
class A { public: explicit A( int b, int c ); };
This code does not directly use explicit .
After a while, you decide to add the default value for c so that it becomes the following:
class A { public: A( int b, int c=0 ); };
In doing so, you focus on the c parameter - in retrospect, it should have a default value. You do not necessarily focus on whether A itself should be implicit. Unfortunately, this change is again explicit .
So, in order to report that ctor is explicit , he can pay for it the first time he writes a method.
Ami Tavory Aug 24 '16 at 11:40 2016-08-24 11:40
source share