fork(1) download
  1. class Hz;
  2. class KHz;
  3.  
  4. class KHz
  5. {
  6. public: KHz(double val) {val_ = val;}
  7. operator double() const {return val_;}
  8. KHz operator*(double mult) {return val_ * mult;}
  9.  
  10. private:
  11. double val_;
  12. };
  13.  
  14. class Hz
  15. {
  16. public:
  17. Hz(double val) {val_ = val;}
  18.  
  19. private:
  20. double val_;
  21. };
  22.  
  23. // Would like to avoid this explicit conversion function:
  24. Hz cnvKHzToHz(KHz khz) {return khz * 1000.0;}
  25.  
  26. void doSomething(KHz khz) {;}
  27.  
  28. int main()
  29. {
  30. Hz ret = 0;
  31. KHz valkhz = 4.0;
  32. ret = cnvKHzToHz(3.0); // Would like to have a compiler ERROR to prevent double argument here
  33. ret = cnvKHzToHz(valkhz); // OK
  34.  
  35. // doSomething(ret); // ERROR: "Cannot convert parameter 1 from 'Hz" to 'KHz'
  36. }
  37.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In function ‘Hz cnvKHzToHz(KHz)’:
prog.cpp:27:36: error: could not convert ‘khz.KHz::operator*(1.0e+3)’ from ‘KHz’ to ‘Hz’
 Hz cnvKHzToHz(KHz khz) {return khz * 1000.0;}
                                ~~~~^~~~~~~~
stdout
Standard output is empty