Hi All, I want to have a template function as an ifunc. Find below my test program.
// Test Program #include <iostream> int glob_t = 2; typedef void (*VOID_FUNC_P)(void); template <typename T> T add_isa1(T x, T y) { std::cout << "ISA1 implementation" << std::endl; return x + y; } template <typename T> T add_isa2(T x, T y) { std::cout << "ISA2 implementation" << std::endl; return x + y; } template <typename T> static VOID_FUNC_P add_resolver(void) { T (*T_p)(T,T) = NULL; switch (glob_t) { case 1: T_p = add_isa1; break; case 2: T_p = add_isa2; break; } return reinterpret_cast<VOID_FUNC_P>(T_p); } template VOID_FUNC_P add_resolver<int>(void); template VOID_FUNC_P add_resolver<double>(void); // explicit/manual instantiation of possibilities int add(int, int) __attribute((ifunc("_Z12add_resolverIiEPFvvEv"))); double add(double, double) __attribute((ifunc("_Z12add_resolverIdEPFvvEv"))); int main() { //int res = add(1,68); double res = add(1.68,68.01); std::cout << "Res = " << res << std::endl; return 0; } 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. 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? Thanks and Regards, Amrita H S