1// 2005-03-04 Paolo Carlini <pcarlini@suse.de> 2// 3// Copyright (C) 2005-2015 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 3, or (at your option) 9// any later version. 10// 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15// 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING3. If not see 18// <http://www.gnu.org/licenses/>. 19 20// 4.6 Relationships between types 21 22#include <tr1/type_traits> 23#include <testsuite_hooks.h> 24#include <testsuite_tr1.h> 25 26class HiddenCons 27{ 28 HiddenCons(); 29 HiddenCons(const HiddenCons&); 30}; 31 32class DerivedHiddenCons 33: private HiddenCons 34{ 35 DerivedHiddenCons(); 36 DerivedHiddenCons(const DerivedHiddenCons&); 37}; 38 39class MultiDerivedHiddenCons 40: private HiddenCons, private __gnu_test::ClassType 41{ 42 MultiDerivedHiddenCons(); 43 MultiDerivedHiddenCons(const MultiDerivedHiddenCons&); 44}; 45 46void test01() 47{ 48 bool test __attribute__((unused)) = true; 49 using std::tr1::is_base_of; 50 using namespace __gnu_test; 51 52 // Positive tests. 53 VERIFY( (test_relationship<is_base_of, int, int>(true)) ); 54 VERIFY( (test_relationship<is_base_of, EnumType, EnumType>(true)) ); 55 VERIFY( (test_relationship<is_base_of, UnionType, UnionType>(true)) ); 56 VERIFY( (test_relationship<is_base_of, AbstractClass, 57 AbstractClass>(true)) ); 58 VERIFY( (test_relationship<is_base_of, ClassType, DerivedType>(true)) ); 59 VERIFY( (test_relationship<is_base_of, ClassType, const DerivedType>(true)) ); 60 VERIFY( (test_relationship<is_base_of, volatile ClassType, 61 volatile DerivedType>(true)) ); 62 VERIFY( (test_relationship<is_base_of, PolymorphicClass, 63 DerivedPolymorphic>(true)) ); 64 VERIFY( (test_relationship<is_base_of, HiddenCons, 65 DerivedHiddenCons>(true)) ); 66 VERIFY( (test_relationship<is_base_of, HiddenCons, 67 MultiDerivedHiddenCons>(true)) ); 68 VERIFY( (test_relationship<is_base_of, ClassType, 69 MultiDerivedHiddenCons>(true)) ); 70 71 // Negative tests. 72 VERIFY( (test_relationship<is_base_of, int, const int>(false)) ); 73 VERIFY( (test_relationship<is_base_of, volatile UnionType, 74 UnionType>(false)) ); 75 VERIFY( (test_relationship<is_base_of, int&, ClassType>(false)) ); 76 VERIFY( (test_relationship<is_base_of, AbstractClass, ClassType>(false)) ); 77 VERIFY( (test_relationship<is_base_of, ClassType, AbstractClass>(false)) ); 78 VERIFY( (test_relationship<is_base_of, DerivedType, ClassType>(false)) ); 79 VERIFY( (test_relationship<is_base_of, DerivedPolymorphic, 80 PolymorphicClass>(false)) ); 81 VERIFY( (test_relationship<is_base_of, DerivedHiddenCons, 82 HiddenCons>(false)) ); 83 VERIFY( (test_relationship<is_base_of, MultiDerivedHiddenCons, 84 HiddenCons>(false)) ); 85 VERIFY( (test_relationship<is_base_of, MultiDerivedHiddenCons, 86 ClassType>(false)) ); 87} 88 89int main() 90{ 91 test01(); 92 return 0; 93} 94