It's so easy to forget to mark a constructor "explicit": adding/removing args, making them optional etc. the single reliable way I know is to declare every constructor as explicit and then remove this keyword only if implicitness is required by design (thanks to the standard that allows this not only on single-argument constructors). But this would look ugly.
not intended implicit constructors open usage of (mistaken) implicit conversion, e.g. as here. this can happen by accident, or can break backward compatibility
so why "explicit" is not default characteristic of a constructor if this would lead to fewer bugs?
p.s. yeah, I read Stroustrup's "The Design and Evolution of C++", just don't remember if he says anything about "explicit" there