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