Rule A13-5-2 (required, implementation, automated)

All user-defined conversion operators shall be defined explicit.

Rationale

Without explicit keyword, a single user defined conversion can be invoked in a standard conversion sequence, which can lead to accidental errors.

Example

// $Id: A13-5-2.cpp 303121 2018-01-09 09:03:52Z michal.szczepankiewicz $ class A { public: explicit A(double d) : d(d) {} explicit operator double() const { return d; } // Compliant private: double d; }; int main(void) { A a{3.1415926535897932384626433832795028841971693993751058209749445923078}; double tmp1{a}; // float tmp2{a}; //compilation error instead of warning, prevents from data // precision loss return 0; }

See also

HIC++ v4.0 [9]: 12.1.1: Do not declare implicit user defined conversions.