template<class...> struct types{ using type = types; };
template<class Acc, class... Types>
struct reversed_ : Acc{};
template<class... RTypes, class Head, class... Tail>
struct reversed_<types<RTypes...>, Head, Tail...> : reversed_<types<Head, RTypes...>, Tail...>{};
template<class... Ts>
struct reversed : reversed_<types<>, Ts...>{};
int main()
{
struct {} _ = reversed<char>::type();
struct {} __ = reversed<char, int>::type();
}
dGVtcGxhdGU8Y2xhc3MuLi4+IHN0cnVjdCB0eXBlc3sgdXNpbmcgdHlwZSA9IHR5cGVzOyB9OwoKdGVtcGxhdGU8Y2xhc3MgQWNjLCBjbGFzcy4uLiBUeXBlcz4Kc3RydWN0IHJldmVyc2VkXyA6IEFjY3t9OwoKdGVtcGxhdGU8Y2xhc3MuLi4gUlR5cGVzLCBjbGFzcyBIZWFkLCBjbGFzcy4uLiBUYWlsPgpzdHJ1Y3QgcmV2ZXJzZWRfPHR5cGVzPFJUeXBlcy4uLj4sIEhlYWQsIFRhaWwuLi4+IDogcmV2ZXJzZWRfPHR5cGVzPEhlYWQsIFJUeXBlcy4uLj4sIFRhaWwuLi4+e307Cgp0ZW1wbGF0ZTxjbGFzcy4uLiBUcz4Kc3RydWN0IHJldmVyc2VkIDogcmV2ZXJzZWRfPHR5cGVzPD4sIFRzLi4uPnt9OwoKaW50IG1haW4oKQp7CiAgICBzdHJ1Y3Qge30gXyA9IHJldmVyc2VkPGNoYXI+Ojp0eXBlKCk7CiAgICBzdHJ1Y3Qge30gX18gPSByZXZlcnNlZDxjaGFyLCBpbnQ+Ojp0eXBlKCk7Cn0K
prog.cpp: In function ‘int main()’:
prog.cpp:14:40: error: conversion from ‘types<char>::type {aka types<char>}’ to non-scalar type ‘main()::<anonymous struct>’ requested
struct {} _ = reversed<char>::type();
^
prog.cpp:15:46: error: conversion from ‘types<int, char>::type {aka types<int, char>}’ to non-scalar type ‘main()::<anonymous struct>’ requested
struct {} __ = reversed<char, int>::type();
^