fork download
  1. #include <iostream>
  2.  
  3. int add(int a, int b){ return a + b; }
  4. int add_f(float a, float b){ return a + b; }
  5.  
  6. union {
  7. int (*f1)(int, int);
  8. int (*f2)(float, float);
  9. } fp;
  10.  
  11. int main(void)
  12. {
  13. fp.f1 = &add;
  14. std::cout << "Expected (1): " << add(1, 3) << std::endl;
  15. std::cout << "Actual (1): " << (fp.f1)(1, 3) << std::endl;
  16.  
  17. std::cout << "Expected (2): " << add(1.0f, 3.0f) << std::endl;
  18. std::cout << "Actual (2): " << (fp.f2)(1.0f, 3.0f) << std::endl;
  19.  
  20. fp.f2 = &add_f;
  21. std::cout << "Expected (3): " << add_f(1.0f, 3.0f) << std::endl;
  22. std::cout << "Actual (3): " << (fp.f2)(1.0f, 3.0f) << std::endl;
  23.  
  24. std::cout << "Expected (4): " << add_f(1, 3) << std::endl;
  25. std::cout << "Actual (4): " << (fp.f1)(1, 3) << std::endl;
  26.  
  27. return 0;
  28. }
Success #stdin #stdout 0.01s 2684KB
stdin
Standard input is empty
stdout
Expected (1): 4
Actual   (1): 4
Expected (2): 4
Actual   (2): 2143289344
Expected (3): 4
Actual   (3): 4
Expected (4): 4
Actual   (4): 0