Building Well-Behaved Type Relationships in C++
01 January 1988
1. Introduction - The C++ programming language [1] allows the provider of a new user-defined type of define the conversions between that type and another type. When the arguments to a function call, overloaded operator, or initialization don't match a declaration exactly, the compiler can use these conversions to coerce arguments to make them match. If exactly one declaration can be matched using conversions, they are automatically supplied; otherwise it is a compile time error.