1 // { dg-options "-std=gnu++0x -w" }
8 template<typename... _Elements> struct types {};
10 // Simple bases implementation
11 template<typename T> struct b {
12 typedef types<__bases(T)...> type;
15 // Simple direct_bases implementation
16 template<typename T> struct db {
17 typedef types<__direct_bases(T)...> type;
20 template <class,class> struct assert_same_type;
21 template <class T> struct assert_same_type<T,T> {};
24 struct C : virtual A {};
25 struct D : public C {};
26 struct B : D, virtual A {};
27 struct E : C, virtual D, B {};
28 struct F : A, B, E {};
31 assert_same_type<b<F>::type, types<A,C,D,A,C,D,B,C,C,D,B,E>>();
32 assert_same_type<db<F>::type, types<A,B,E>>();
33 assert_same_type<db<int>::type, types<>>();