// { dg-options "-std=gnu++0x" } // A tuple type template struct tuple { }; // Determine if two types are the same template struct is_same { static const bool value = false; }; template struct is_same { static const bool value = true; }; // Append 'T' to the end of Tuple template struct append_to_tuple; template struct append_to_tuple > { typedef tuple type; }; // Reverse a sequence of arguments (and return the result as a tuple) template struct reverse; template struct reverse { typedef typename append_to_tuple::type>::type type; }; template<> struct reverse<> { typedef tuple<> type; }; int a0[is_same::type, tuple<> >::value? 1 : -1]; int a1[is_same::type, tuple >::value? 1 : -1]; int a2[is_same::type, tuple >::value? 1 : -1]; int a3[is_same::type, tuple >::value? 1 : -1];