1*a65addddSAndroid Build Coastguard Worker /* 2*a65addddSAndroid Build Coastguard Worker * Copyright 2014 Google Inc. All rights reserved. 3*a65addddSAndroid Build Coastguard Worker * 4*a65addddSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*a65addddSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*a65addddSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*a65addddSAndroid Build Coastguard Worker * 8*a65addddSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*a65addddSAndroid Build Coastguard Worker * 10*a65addddSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*a65addddSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*a65addddSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*a65addddSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*a65addddSAndroid Build Coastguard Worker * limitations under the License. 15*a65addddSAndroid Build Coastguard Worker */ 16*a65addddSAndroid Build Coastguard Worker 17*a65addddSAndroid Build Coastguard Worker #ifndef FRUIT_ASSERT_H 18*a65addddSAndroid Build Coastguard Worker #define FRUIT_ASSERT_H 19*a65addddSAndroid Build Coastguard Worker 20*a65addddSAndroid Build Coastguard Worker #if FRUIT_EXTRA_DEBUG 21*a65addddSAndroid Build Coastguard Worker #include <cassert> 22*a65addddSAndroid Build Coastguard Worker // Usage: FruitStaticAssert(MetaExpr) 23*a65addddSAndroid Build Coastguard Worker #define FruitStaticAssert(...) static_assert(fruit::impl::meta::Eval<__VA_ARGS__>::value, "") 24*a65addddSAndroid Build Coastguard Worker #define FruitAssert(...) assert(__VA_ARGS__) 25*a65addddSAndroid Build Coastguard Worker 26*a65addddSAndroid Build Coastguard Worker #else 27*a65addddSAndroid Build Coastguard Worker // We still define this, otherwise some compilers (e.g. Clang 3.9) would complain that there's a stray ';' when this is 28*a65addddSAndroid Build Coastguard Worker // used inside a struct/class definition. 29*a65addddSAndroid Build Coastguard Worker #define FruitStaticAssert(...) static_assert(true, "") 30*a65addddSAndroid Build Coastguard Worker #define FruitAssert(...) 31*a65addddSAndroid Build Coastguard Worker 32*a65addddSAndroid Build Coastguard Worker #endif 33*a65addddSAndroid Build Coastguard Worker 34*a65addddSAndroid Build Coastguard Worker #define FruitDelegateCheck(...) static_assert(true || sizeof(fruit::impl::meta::Eval<__VA_ARGS__>), "") 35*a65addddSAndroid Build Coastguard Worker #define FruitDisplayErrorForType(...) static_assert(false && sizeof(fruit::impl::meta::Eval<__VA_ARGS__>), "") 36*a65addddSAndroid Build Coastguard Worker 37*a65addddSAndroid Build Coastguard Worker #endif // FRUIT_ASSERT_H 38