Есть код - как сделать так, чтобы шланг в него мог?
#include<iostream>
template<typename ret> using fptr_t = ret(*)(...);
template<typename ret, typename ... args> using fp_t = ret(*)(args...);
template<typename ret, typename ... args> auto cast(fp_t<ret, args...> f) { return (fptr_t<ret>)f;}//вот это не работает. В гцц работает.
template<typename ... args> auto icast(fp_t<int, args...> f) { return cast<int, args...>(f);}
int a(int a) {std::cout << __PRETTY_FUNCTION__ << std::endl; return 0;}
int a(int a, int b) {std::cout << __PRETTY_FUNCTION__ << std::endl; return 0;}
int main(void) {
auto f = icast<int>(a);f();
auto f1 = icast<int, int>(a);f1();
}
Я попробовал на gcc.godbolt.org - шланг всех версий от него либо крешиться, либо не осиливает. Может можно это как-то по-иному реализовать?
_______________________________________________________________