1//
2//  boost/assert.hpp - BOOST_ASSERT(expr)
3//                     BOOST_ASSERT_MSG(expr, msg)
4//                     BOOST_VERIFY(expr)
5//
6//  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
7//  Copyright (c) 2007 Peter Dimov
8//  Copyright (c) Beman Dawes 2011
9//
10// Distributed under the Boost Software License, Version 1.0. (See
11// accompanying file LICENSE_1_0.txt or copy at
12// http://www.boost.org/LICENSE_1_0.txt)
13//
14//  Note: There are no include guards. This is intentional.
15//
16//  See http://www.boost.org/libs/utility/assert.html for documentation.
17//
18
19//
20// Stop inspect complaining about use of 'assert':
21//
22// boostinspect:naassert_macro
23//
24
25//--------------------------------------------------------------------------------------//
26//                                     BOOST_ASSERT                                     //
27//--------------------------------------------------------------------------------------//
28
29#undef BOOST_ASSERT
30
31#if defined(BOOST_DISABLE_ASSERTS)
32
33# define BOOST_ASSERT(expr) ((void)0)
34
35#elif defined(BOOST_ENABLE_ASSERT_HANDLER)
36
37#include <boost/current_function.hpp>
38
39namespace boost
40{
41  void assertion_failed(char const * expr,
42                        char const * function, char const * file, long line); // user defined
43} // namespace boost
44
45#define BOOST_ASSERT(expr) ((expr) \
46  ? ((void)0) \
47  : ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
48
49#else
50# include <assert.h> // .h to support old libraries w/o <cassert> - effect is the same
51# define BOOST_ASSERT(expr) assert(expr)
52#endif
53
54//--------------------------------------------------------------------------------------//
55//                                   BOOST_ASSERT_MSG                                   //
56//--------------------------------------------------------------------------------------//
57
58# undef BOOST_ASSERT_MSG
59
60#if defined(BOOST_DISABLE_ASSERTS) || defined(NDEBUG)
61
62  #define BOOST_ASSERT_MSG(expr, msg) ((void)0)
63
64#elif defined(BOOST_ENABLE_ASSERT_HANDLER)
65
66  #include <boost/current_function.hpp>
67
68  namespace boost
69  {
70    void assertion_failed_msg(char const * expr, char const * msg,
71                              char const * function, char const * file, long line); // user defined
72  } // namespace boost
73
74  #define BOOST_ASSERT_MSG(expr, msg) ((expr) \
75    ? ((void)0) \
76    : ::boost::assertion_failed_msg(#expr, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
77
78#else
79  #ifndef BOOST_ASSERT_HPP
80    #define BOOST_ASSERT_HPP
81    #include <cstdlib>
82    #include <iostream>
83    #include <boost/current_function.hpp>
84
85    //  IDE's like Visual Studio perform better if output goes to std::cout or
86    //  some other stream, so allow user to configure output stream:
87    #ifndef BOOST_ASSERT_MSG_OSTREAM
88    # define BOOST_ASSERT_MSG_OSTREAM std::cerr
89    #endif
90
91    namespace boost
92    {
93      namespace assertion
94      {
95        namespace detail
96        {
97          inline void assertion_failed_msg(char const * expr, char const * msg, char const * function,
98            char const * file, long line)
99          {
100            BOOST_ASSERT_MSG_OSTREAM
101              << "***** Internal Program Error - assertion (" << expr << ") failed in "
102              << function << ":\n"
103              << file << '(' << line << "): " << msg << std::endl;
104            std::abort();
105          }
106        } // detail
107      } // assertion
108    } // detail
109  #endif
110
111  #define BOOST_ASSERT_MSG(expr, msg) ((expr) \
112    ? ((void)0) \
113    : ::boost::assertion::detail::assertion_failed_msg(#expr, msg, \
114          BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
115#endif
116
117//--------------------------------------------------------------------------------------//
118//                                     BOOST_VERIFY                                     //
119//--------------------------------------------------------------------------------------//
120
121#undef BOOST_VERIFY
122
123#if defined(BOOST_DISABLE_ASSERTS) || ( !defined(BOOST_ENABLE_ASSERT_HANDLER) && defined(NDEBUG) )
124
125# define BOOST_VERIFY(expr) ((void)(expr))
126
127#else
128
129# define BOOST_VERIFY(expr) BOOST_ASSERT(expr)
130
131#endif
132