<div dir="ltr">Hi All,<br clear="all"><div><br></div>I want to have a template function as an ifunc. Find below my test program.<br><br>// Test Program<br>#include <iostream><br><br>int glob_t = 2;<br>typedef void (*VOID_FUNC_P)(void);<br><br>template <typename T><br>T add_isa1(T x, T y) {<br>   std::cout << "ISA1 implementation" << std::endl;<br>   return x + y;<br>}<br><br>template <typename T><br>T add_isa2(T x, T y) {<br>   std::cout << "ISA2 implementation" << std::endl;<br>   return x + y;<br>}<br><br>template <typename T><br>static VOID_FUNC_P add_resolver(void) {<br>   T (*T_p)(T,T) = NULL;<br>   switch (glob_t) {<br>      case 1: <br>              T_p = add_isa1;<br>              break;<br>      case 2: <br>              T_p = add_isa2;<br>              break;<br>   }<br>   return reinterpret_cast<VOID_FUNC_P>(T_p);<br>}<br><br>template VOID_FUNC_P add_resolver<int>(void);<br>template VOID_FUNC_P add_resolver<double>(void);<br><br>// explicit/manual instantiation of possibilities<br>int add(int, int) __attribute((ifunc("_Z12add_resolverIiEPFvvEv")));<br>double add(double, double) __attribute((ifunc("_Z12add_resolverIdEPFvvEv")));<br><br>int main()<br>{<br>   //int res = add(1,68);<br>   double res = add(1.68,68.01);<br>   std::cout << "Res = " << res << std::endl;<br>   return 0;<br>}<br><br><br>I have to explicitly declare the ifunc resolver function for all possible combinations of template arguments. In reality, I think it would be impractical for programmers to do this kind of manual/explicit instantiation.<br>I am interested to know if there any other better way to use ifuncs with template functions. If there is none, is it worth suggesting to the C++ standards?<br><div><br></div><div><br></div><div>Thanks and Regards,</div><div>Amrita H S</div></div>