fork download
  1. #include <iostream>
  2.  
  3. template <int I1, int I2>
  4. class adder { };
  5.  
  6. template <int I1, int I2>
  7. class adder1 : public adder<I1, I2> { };
  8.  
  9. template <int I1, int I2>
  10. class adder2 : public adder<I1, I2> { };
  11.  
  12. template <typename A, int I>
  13. class fusedmultiplyadder { };
  14.  
  15. template <int i1, int i2>
  16. int adderI1(adder<i1, i2>) { return i1; }
  17. template <int i1, int i2>
  18. int adderI2(adder<i1, i2>) { return i2; }
  19.  
  20. template <typename A, int i3>
  21. void foo(fusedmultiplyadder<A, i3>)
  22. {
  23. std::cout << "fma: " << adderI1(A()) << ", " << adderI2(A()) << ", " << i3 << std::endl;
  24. }
  25.  
  26. int main()
  27. {
  28. fusedmultiplyadder<adder1<2, 3>, 4> fma1;
  29. foo(fma1);
  30. fusedmultiplyadder<adder2<2, 3>, 4> fma2;
  31. foo(fma2);
  32. return 0;
  33. }
Success #stdin #stdout 0s 2884KB
stdin
Standard input is empty
stdout
fma: 2, 3, 4
fma: 2, 3, 4