#define BOOST_PP_LOCAL_MACRO(n) \
template <BOOST_PP_ENUM_PARAMS(n, class A)> \
auto plus(BOOST_PP_ENUM_BINARY_PARAMS(n, A, const &a)) \
-> decltype(std::forward<A0>(a0) BOOST_PP_REPEAT_FROM_TO(1, n, PLUS_FORWARD_A, ~)) \
{ \
return std::forward<A0>(a0) BOOST_PP_REPEAT_FROM_TO(1, n, PLUS_FORWARD_A, ~); \
} \
/**/
#define PLUS_FORWARD_A(z, i, unused) \
+ std::forward<BOOST_PP_CAT(A, i)>(BOOST_PP_CAT(a, i)) \
/**/
#define BOOST_PP_LOCAL_LIMITS (1, 10)
#include BOOST_PP_LOCAL_ITERATE()
#undef PLUS_FORWARD_A
I2RlZmluZSBCT09TVF9QUF9MT0NBTF9NQUNSTyhuKSBcCnRlbXBsYXRlIDxCT09TVF9QUF9FTlVNX1BBUkFNUyhuLCBjbGFzcyBBKT4gXAphdXRvIHBsdXMoQk9PU1RfUFBfRU5VTV9CSU5BUllfUEFSQU1TKG4sIEEsIGNvbnN0ICZhKSkgXAogLT4gZGVjbHR5cGUoc3RkOjpmb3J3YXJkPEEwPihhMCkgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE8oMSwgbiwgUExVU19GT1JXQVJEX0EsIH4pKSBcCnsgXAogICAgcmV0dXJuIHN0ZDo6Zm9yd2FyZDxBMD4oYTApIEJPT1NUX1BQX1JFUEVBVF9GUk9NX1RPKDEsIG4sIFBMVVNfRk9SV0FSRF9BLCB+KTsgXAp9IFwKLyoqLwojZGVmaW5lIFBMVVNfRk9SV0FSRF9BKHosIGksIHVudXNlZCkgXAorIHN0ZDo6Zm9yd2FyZDxCT09TVF9QUF9DQVQoQSwgaSk+KEJPT1NUX1BQX0NBVChhLCBpKSkgXAovKiovCgojZGVmaW5lIEJPT1NUX1BQX0xPQ0FMX0xJTUlUUyAoMSwgMTApCiNpbmNsdWRlIEJPT1NUX1BQX0xPQ0FMX0lURVJBVEUoKQoKI3VuZGVmIFBMVVNfRk9SV0FSRF9BCg==