class Hz;
class KHz;
class KHz
{
public : KHz( double val) { val_ = val; }
operator double ( ) const { return val_; }
KHz operator* ( double mult) { return val_ * mult; }
private :
double val_;
} ;
class Hz
{
public :
Hz( double val) { val_ = val; }
private :
double val_;
} ;
// Would like to avoid this explicit conversion function:
Hz cnvKHzToHz( KHz khz) { return khz * 1000.0 ; }
void doSomething( KHz khz) { ; }
int main( )
{
Hz ret = 0 ;
KHz valkhz = 4.0 ;
ret = cnvKHzToHz( 3.0 ) ; // Would like to have a compiler ERROR to prevent double argument here
ret = cnvKHzToHz( valkhz) ; // OK
// doSomething(ret); // ERROR: "Cannot convert parameter 1 from 'Hz" to 'KHz'
}
Y2xhc3MgSHo7CmNsYXNzIEtIejsKCmNsYXNzIEtIegp7CnB1YmxpYzogS0h6KGRvdWJsZSB2YWwpIHt2YWxfID0gdmFsO30KCW9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0IHtyZXR1cm4gdmFsXzt9CglLSHogb3BlcmF0b3IqKGRvdWJsZSBtdWx0KSB7cmV0dXJuIHZhbF8gKiBtdWx0O30KCQpwcml2YXRlOgoJZG91YmxlIHZhbF87Cn07CgpjbGFzcyBIegp7CnB1YmxpYzoKCUh6KGRvdWJsZSB2YWwpIHt2YWxfID0gdmFsO30KCQpwcml2YXRlOgoJZG91YmxlIHZhbF87Cn07CgovLyBXb3VsZCBsaWtlIHRvIGF2b2lkIHRoaXMgZXhwbGljaXQgY29udmVyc2lvbiBmdW5jdGlvbjoKSHogY252S0h6VG9IeihLSHoga2h6KSB7cmV0dXJuIGtoeiAqIDEwMDAuMDt9Cgp2b2lkIGRvU29tZXRoaW5nKEtIeiBraHopIHs7fQoKaW50IG1haW4oKQp7CglIeiByZXQgPSAwOwoJS0h6IHZhbGtoeiA9IDQuMDsKCXJldCA9IGNudktIelRvSHooMy4wKTsgLy8gV291bGQgbGlrZSB0byBoYXZlIGEgY29tcGlsZXIgRVJST1IgdG8gcHJldmVudCBkb3VibGUgYXJndW1lbnQgaGVyZQoJcmV0ID0gY252S0h6VG9Ieih2YWxraHopOyAvLyBPSwoJCgkvLyBkb1NvbWV0aGluZyhyZXQpOyAvLyBFUlJPUjogIkNhbm5vdCBjb252ZXJ0IHBhcmFtZXRlciAxIGZyb20gJ0h6IiB0byAnS0h6Jwp9Cg==