diff options
Diffstat (limited to 'boost/contract/detail/assert.hpp')
-rw-r--r-- | boost/contract/detail/assert.hpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/boost/contract/detail/assert.hpp b/boost/contract/detail/assert.hpp new file mode 100644 index 0000000000..e44726733e --- /dev/null +++ b/boost/contract/detail/assert.hpp @@ -0,0 +1,28 @@ + +#ifndef BOOST_CONTRACT_DETAIL_ASSERT_HPP_ +#define BOOST_CONTRACT_DETAIL_ASSERT_HPP_ + +// Copyright (C) 2008-2018 Lorenzo Caminiti +// Distributed under the Boost Software License, Version 1.0 (see accompanying +// file LICENSE_1_0.txt or a copy at http://www.boost.org/LICENSE_1_0.txt). +// See: http://www.boost.org/doc/libs/release/libs/contract/doc/html/index.html + +#include <boost/contract/core/exception.hpp> +#include <boost/contract/detail/noop.hpp> +#include <boost/preprocessor/stringize.hpp> + +// In detail because used by both ASSERT and CHECK. +// Use ternary operator `?:` and no trailing `;` here to allow `if(...) ASSERT( +// ...); else ...` (won't compile if expands using an if statement instead even +// if wrapped by {}, and else won't compile if expands trailing `;`). +#define BOOST_CONTRACT_DETAIL_ASSERT(cond) \ + /* no if-statement here */ \ + ((cond) ? \ + BOOST_CONTRACT_DETAIL_NOOP \ + : \ + throw boost::contract::assertion_failure( \ + __FILE__, __LINE__, BOOST_PP_STRINGIZE(cond)) \ + ) /* no ; here */ + +#endif // #include guard + |