template<typename ... Args> struct revert;
template<typename T, typename ... Args>
struct revert<T, Args...> {
template<class ...RevArg>
constexpr static auto Make(T val, Args...args, RevArg...revArg) {
return revert<Args...>::Make(args..., val, revArg...);
}
};
template<>
struct revert<> {
template<class ...RevArg>
constexpr static auto Make(RevArg...revArg) {
return ObjectList<RevArg...>(revArg...);
}
};
template<typename ... Args>
constexpr auto CreateList(Args...args) {
return revert<Args...>::Make(args...);
}