#include #define DECL(z, n, data) \ namespace detail\ {\ template\ struct back_t##data##_##n\ {\ typedef typename back_t##data##_##n::type type;\ };\ \ template\ struct back_t##data##_##n\ {\ typedef T type;\ };\ }\ \ template\ T back##data##_##n(T && t)\ {\ return t;\ }\ \ template\ typename detail::back_t##data##_##n::type back##data##_##n(T && t, U &&... u)\ {\ return ::back##data##_##n(static_cast(u)...);\ }\ #define INNER(z, n, data) BOOST_PP_REPEAT(z, DECL, n) BOOST_PP_REPEAT(256, INNER, "dontcare") int main() { #define USE(z, n, data) int i##data##_##n = ::back##data##_##n(1,2,3); #define INNER_USE(z, n, data) BOOST_PP_REPEAT(z, USE, n) BOOST_PP_REPEAT(256, INNER_USE, "dontcare") }