#include <iostream>
template < int I1, int I2>
class adder { } ;
template < int I1, int I2>
class adder1 : public adder< I1, I2> { } ;
template < int I1, int I2>
class adder2 : public adder< I1, I2> { } ;
template < typename A, int I>
class fusedmultiplyadder { } ;
template < int i1, int i2, int i3>
void foo( fusedmultiplyadder< adder< i1, i2> , i3> )
{
std:: cout << "fma: " << i1 << ", " << i2 << ", " << i3 << std:: endl ;
}
int main( )
{
fusedmultiplyadder< adder1< 2 , 3 > , 4 > fma1;
foo( fma1) ;
fusedmultiplyadder< adder2< 2 , 3 > , 4 > fma2;
foo( fma2) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCnRlbXBsYXRlIDxpbnQgSTEsIGludCBJMj4KY2xhc3MgYWRkZXIgeyB9OwogCnRlbXBsYXRlIDxpbnQgSTEsIGludCBJMj4KY2xhc3MgYWRkZXIxIDogcHVibGljIGFkZGVyPEkxLCBJMj4geyB9OwogCnRlbXBsYXRlIDxpbnQgSTEsIGludCBJMj4KY2xhc3MgYWRkZXIyIDogcHVibGljIGFkZGVyPEkxLCBJMj4geyB9OwogCnRlbXBsYXRlIDx0eXBlbmFtZSBBLCBpbnQgST4KY2xhc3MgZnVzZWRtdWx0aXBseWFkZGVyIHsgfTsKIAp0ZW1wbGF0ZSA8aW50IGkxLCBpbnQgaTIsIGludCBpMz4Kdm9pZCBmb28oZnVzZWRtdWx0aXBseWFkZGVyPGFkZGVyPGkxLCBpMj4sIGkzPikKewogICBzdGQ6OmNvdXQgPDwgImZtYTogIiA8PCBpMSA8PCAiLCAiIDw8IGkyIDw8ICIsICIgPDwgaTMgPDwgc3RkOjplbmRsOwp9CiAKaW50IG1haW4oKQp7CiAgIGZ1c2VkbXVsdGlwbHlhZGRlcjxhZGRlcjE8MiwgMz4sIDQ+IGZtYTE7CiAgIGZvbyhmbWExKTsKICAgZnVzZWRtdWx0aXBseWFkZGVyPGFkZGVyMjwyLCAzPiwgND4gZm1hMjsKICAgZm9vKGZtYTIpOwogICByZXR1cm4gMDsKfQ==
compilation info
prog.cpp: In function 'int main()':
prog.cpp:24:12: error: no matching function for call to 'foo(fusedmultiplyadder<adder1<2, 3>, 4>&)'
prog.cpp:26:12: error: no matching function for call to 'foo(fusedmultiplyadder<adder2<2, 3>, 4>&)'
stdout