1 /* 2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 #include "utilities/debug.hpp" 26 #include "utilities/traits/isSame.hpp" 27 28 class IsSameTest { 29 enum EnumType {}; 30 enum EnumType2 {}; 31 union UnionType {}; 32 union UnionType2 {}; 33 class ClassType {}; 34 class ClassType2 {}; 35 class DerivedClassType: ClassType {}; 36 class DerivedClassType2: ClassType2 {}; 37 struct StructType {}; 38 struct StructType2 {}; 39 typedef int PrimitiveType; 40 typedef long PrimitiveType2; 41 42 static void test() { 43 STATIC_ASSERT((IsSame<EnumType, EnumType>::value)); 44 STATIC_ASSERT((IsSame<UnionType, UnionType>::value)); 45 STATIC_ASSERT((IsSame<ClassType, ClassType>::value)); 46 STATIC_ASSERT((IsSame<DerivedClassType, DerivedClassType>::value)); 47 STATIC_ASSERT((IsSame<StructType, StructType>::value)); 48 STATIC_ASSERT((IsSame<PrimitiveType, PrimitiveType>::value)); 49 50 STATIC_ASSERT((IsSame<volatile EnumType, volatile EnumType>::value)); 51 STATIC_ASSERT((IsSame<volatile UnionType, volatile UnionType>::value)); 52 STATIC_ASSERT((IsSame<volatile ClassType, volatile ClassType>::value)); 53 STATIC_ASSERT((IsSame<volatile DerivedClassType, volatile DerivedClassType>::value)); 54 STATIC_ASSERT((IsSame<volatile StructType, volatile StructType>::value)); 55 STATIC_ASSERT((IsSame<volatile PrimitiveType, volatile PrimitiveType>::value)); 56 57 STATIC_ASSERT((IsSame<const EnumType, const EnumType>::value)); 58 STATIC_ASSERT((IsSame<const UnionType, const UnionType>::value)); 59 STATIC_ASSERT((IsSame<const ClassType, const ClassType>::value)); 60 STATIC_ASSERT((IsSame<const DerivedClassType, const DerivedClassType>::value)); 61 STATIC_ASSERT((IsSame<const StructType, const StructType>::value)); 62 STATIC_ASSERT((IsSame<const PrimitiveType, const PrimitiveType>::value)); 63 64 STATIC_ASSERT((!IsSame<const EnumType, EnumType>::value)); 65 STATIC_ASSERT((!IsSame<const UnionType, UnionType>::value)); 66 STATIC_ASSERT((!IsSame<const ClassType, ClassType>::value)); 67 STATIC_ASSERT((!IsSame<const DerivedClassType, DerivedClassType>::value)); 68 STATIC_ASSERT((!IsSame<const StructType, StructType>::value)); 69 STATIC_ASSERT((!IsSame<const PrimitiveType, PrimitiveType>::value)); 70 STATIC_ASSERT((!IsSame<EnumType, const EnumType>::value)); 71 STATIC_ASSERT((!IsSame<UnionType, const UnionType>::value)); 72 STATIC_ASSERT((!IsSame<ClassType, const ClassType>::value)); 73 STATIC_ASSERT((!IsSame<DerivedClassType, const DerivedClassType>::value)); 74 STATIC_ASSERT((!IsSame<StructType, const StructType>::value)); 75 STATIC_ASSERT((!IsSame<PrimitiveType, const PrimitiveType>::value)); 76 77 STATIC_ASSERT((!IsSame<volatile EnumType, EnumType>::value)); 78 STATIC_ASSERT((!IsSame<volatile UnionType, UnionType>::value)); 79 STATIC_ASSERT((!IsSame<volatile ClassType, ClassType>::value)); 80 STATIC_ASSERT((!IsSame<volatile DerivedClassType, DerivedClassType>::value)); 81 STATIC_ASSERT((!IsSame<volatile StructType, StructType>::value)); 82 STATIC_ASSERT((!IsSame<volatile PrimitiveType, PrimitiveType>::value)); 83 STATIC_ASSERT((!IsSame<EnumType, volatile EnumType>::value)); 84 STATIC_ASSERT((!IsSame<UnionType, volatile UnionType>::value)); 85 STATIC_ASSERT((!IsSame<ClassType, volatile ClassType>::value)); 86 STATIC_ASSERT((!IsSame<DerivedClassType, volatile DerivedClassType>::value)); 87 STATIC_ASSERT((!IsSame<StructType, volatile StructType>::value)); 88 STATIC_ASSERT((!IsSame<PrimitiveType, volatile PrimitiveType>::value)); 89 90 STATIC_ASSERT((!IsSame<EnumType, UnionType>::value)); 91 STATIC_ASSERT((!IsSame<EnumType, ClassType>::value)); 92 STATIC_ASSERT((!IsSame<EnumType, DerivedClassType>::value)); 93 STATIC_ASSERT((!IsSame<EnumType, StructType>::value)); 94 STATIC_ASSERT((!IsSame<EnumType, PrimitiveType>::value)); 95 96 STATIC_ASSERT((!IsSame<UnionType, EnumType>::value)); 97 STATIC_ASSERT((!IsSame<UnionType, ClassType>::value)); 98 STATIC_ASSERT((!IsSame<UnionType, DerivedClassType>::value)); 99 STATIC_ASSERT((!IsSame<UnionType, StructType>::value)); 100 STATIC_ASSERT((!IsSame<UnionType, PrimitiveType>::value)); 101 102 STATIC_ASSERT((!IsSame<ClassType, EnumType>::value)); 103 STATIC_ASSERT((!IsSame<ClassType, UnionType>::value)); 104 STATIC_ASSERT((!IsSame<ClassType, DerivedClassType>::value)); 105 STATIC_ASSERT((!IsSame<ClassType, StructType>::value)); 106 STATIC_ASSERT((!IsSame<ClassType, PrimitiveType>::value)); 107 108 STATIC_ASSERT((!IsSame<DerivedClassType, EnumType>::value)); 109 STATIC_ASSERT((!IsSame<DerivedClassType, UnionType>::value)); 110 STATIC_ASSERT((!IsSame<DerivedClassType, ClassType>::value)); 111 STATIC_ASSERT((!IsSame<DerivedClassType, StructType>::value)); 112 STATIC_ASSERT((!IsSame<DerivedClassType, PrimitiveType>::value)); 113 114 STATIC_ASSERT((!IsSame<StructType, EnumType>::value)); 115 STATIC_ASSERT((!IsSame<StructType, UnionType>::value)); 116 STATIC_ASSERT((!IsSame<StructType, ClassType>::value)); 117 STATIC_ASSERT((!IsSame<StructType, DerivedClassType>::value)); 118 STATIC_ASSERT((!IsSame<StructType, PrimitiveType>::value)); 119 120 STATIC_ASSERT((!IsSame<PrimitiveType, EnumType>::value)); 121 STATIC_ASSERT((!IsSame<PrimitiveType, UnionType>::value)); 122 STATIC_ASSERT((!IsSame<PrimitiveType, ClassType>::value)); 123 STATIC_ASSERT((!IsSame<PrimitiveType, DerivedClassType>::value)); 124 STATIC_ASSERT((!IsSame<PrimitiveType, StructType>::value)); 125 126 STATIC_ASSERT((!IsSame<EnumType, EnumType2>::value)); 127 STATIC_ASSERT((!IsSame<UnionType, UnionType2>::value)); 128 STATIC_ASSERT((!IsSame<ClassType, ClassType2>::value)); 129 STATIC_ASSERT((!IsSame<DerivedClassType, DerivedClassType2>::value)); 130 STATIC_ASSERT((!IsSame<StructType, StructType2>::value)); 131 STATIC_ASSERT((!IsSame<PrimitiveType, PrimitiveType2>::value)); 132 133 STATIC_ASSERT((!IsSame<int*, volatile int*>::value)); 134 STATIC_ASSERT((!IsSame<int*, int volatile*>::value)); 135 STATIC_ASSERT((!IsSame<int*, const int*>::value)); 136 STATIC_ASSERT((!IsSame<int*, int const*>::value)); 137 138 STATIC_ASSERT((!IsSame<int*, long*>::value)); 139 140 STATIC_ASSERT((IsSame<int*, int*>::value)); 141 } 142 }; 143