2016-12-07 Thomas Preud'homme <thomas.preudhomme@arm.com>
[official-gcc.git] / gcc / testsuite / g++.dg / ext / bases.C
blob43f71925dcd624d83539e945c379b101e9d122b0
1 // { dg-options "-w" }
2 // { dg-do run { target c++11 } }
4 #include<typeinfo>
5 #include<cassert>
7 // A simple typelist
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> {};
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 {};
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;