#include <iostream>
template <int I1, int I2>
struct adder { };
template <typename A, int I>
struct 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<adder<2, 3>, 4> fma;
foo(fma);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPGludCBJMSwgaW50IEkyPgpzdHJ1Y3QgYWRkZXIgeyB9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIEEsIGludCBJPgpzdHJ1Y3QgZnVzZWRtdWx0aXBseWFkZGVyIHsgfTsKCnRlbXBsYXRlIDxpbnQgaTEsIGludCBpMiwgaW50IGkzPgp2b2lkIGZvbyhmdXNlZG11bHRpcGx5YWRkZXI8YWRkZXI8aTEsIGkyPiwgaTM+KQp7CiAgIHN0ZDo6Y291dCA8PCAiZm1hOiAiIDw8IGkxIDw8ICIsICIgPDwgaTIgPDwgIiwgIiA8PCBpMyA8PCBzdGQ6OmVuZGw7Cn0KCmludCBtYWluKCkKewogICBmdXNlZG11bHRpcGx5YWRkZXI8YWRkZXI8MiwgMz4sIDQ+IGZtYTsKICAgZm9vKGZtYSk7CiAgIHJldHVybiAwOwp9