OSDN Git Service

2012-06-14 Richard Guenther <rguenther@suse.de>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / ext / bases.C
1 // { dg-options "-std=gnu++0x -w" }
2 // { dg-do run }
3
4 #include<typeinfo>
5 #include<cassert>
6
7 // A simple typelist
8 template<typename... _Elements> struct types {};
9
10 // Simple bases implementation
11 template<typename T> struct b {
12   typedef types<__bases(T)...> type;
13 };
14
15 // Simple direct_bases implementation
16 template<typename T> struct db {
17   typedef types<__direct_bases(T)...> type;
18 };
19
20 template <class,class> struct assert_same_type;
21 template <class T> struct assert_same_type<T,T> {};
22
23 struct A {};
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 {};
29
30 int main() {
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<>>();
34   return 0;
35 }