LINUX.ORG.RU

История изменений

Исправление Kuzy, (текущая версия) :

Не знаю, как ему это удалось, но он запутался в юзингах.

Так работает:

#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(ret(*f)(args...)) {
	return (ret(*)(...))f;
}

template<typename ... args>
auto icast(int(*f)(args...)) {
	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();
}

Исходная версия Kuzy, :

Не знаю, как ему это удалось, но он запутался в юзингах.

#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(ret(*f)(args...)) {
	return (ret(*)(...))f;
}

template<typename ... args>
auto icast(int(*f)(args...)) {
	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();
}