#include #include template class F, typename... Ts> void dispatch(int x, Ts&& ...args) { if (x > 0) F()(std::forward(args)...); else F()(std::forward(args)...); } template struct bla { void operator()(int&& a, char&& b, double&& c) const { std::cout << sizeof(T) << " " << typeid(T).name() << " " << a << " " << b << " " << c << std::endl; } }; template struct bla128 { void operator()(int&& a, char&& b, __float128&& c) const { std::cout << sizeof(T) << " " << typeid(T).name() << " " << a << " " << b << " " << (double) c << std::endl; } }; main() { std::cout << "main()" << std::endl; //bla()(1, 'a', 5.5); dispatch(5, 1, 'a', (__float128) 5.5); dispatch(-5, 1, 'a', 5.5); }