diff options
Diffstat (limited to 'zen/assert_static.h')
-rw-r--r-- | zen/assert_static.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/zen/assert_static.h b/zen/assert_static.h new file mode 100644 index 00000000..00c4c5c8 --- /dev/null +++ b/zen/assert_static.h @@ -0,0 +1,44 @@ +// ************************************************************************** +// * This file is part of the zenXML project. It is distributed under the * +// * Boost Software License, Version 1.0. See accompanying file * +// * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt. * +// * Copyright (C) 2011 ZenJu (zhnmju123 AT gmx.de) * +// ************************************************************************** + +#ifndef ASSERTSTATIC_H_INCLUDED +#define ASSERTSTATIC_H_INCLUDED + +/* +//compile time assert based on Loki (http://loki-lib.sourceforge.net) + +#ifdef NDEBUG + +#define assert_static(x) //((void)0) -> leads to error when seen in namespace scope! + +#else // debugging enabled +namespace static_check_impl +{ +template<int> +struct CompileTimeError; + +template<> +struct CompileTimeError<true> {}; +} + +#define LOKI_CONCAT( X, Y ) LOKI_CONCAT_SUB( X, Y ) +#define LOKI_CONCAT_SUB( X, Y ) X##Y + +#define assert_static(expr) \ + enum { LOKI_CONCAT(loki_enum_dummy_value, __LINE__) = sizeof(StaticCheckImpl::CompileTimeError<static_cast<bool>(expr) >) } + +// #define assert_static(expr) \ +// { Loki::CompileTimeError<((expr) != 0)> Static_Assert_Has_Failed; (void)Static_Assert_Has_Failed; } + +#endif +*/ + +//C++11: +#define assert_static(X) \ + static_assert(X, "Static assert has failed!"); + +#endif //ASSERTSTATIC_H_INCLUDED |