I recently came across some weird looking class that had three constructors:
class Class
{
public:
explicit Class(int );
Class(AnotherClass );
explicit Class(YetAnotherClass, AnotherClass );
// ...
}
This doesn't really make sense to me - I thought the explicit keyword is to protect compiler chosen construction from a foreign type.
Is this allowed? If it it, what does it mean?
In C++11 multi-parameter constructors can be implicitly converted to with brace initialization.
However, before C++11 explicit
only applied to single-argument constructors. For multiple-argument constructors, it was ignored and had no effect.