• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright Antony Polukhin, 2016-2020.
2 //
3 // Distributed under the Boost Software License, Version 1.0. (See
4 // accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
6 
7 #define BOOST_ENABLE_ASSERT_HANDLER
8 
9 #include <cstdlib> // std::exit
10 #include <boost/array.hpp>
11 BOOST_NOINLINE void foo(int i);
12 BOOST_NOINLINE void bar(int i);
13 
bar(int i)14 BOOST_NOINLINE void bar(int i) {
15     boost::array<int, 5> a = {{101, 100, 123, 23, 32}};
16     if (i >= 0) {
17         foo(a[i]);
18     } else {
19         std::exit(1);
20     }
21 }
22 
foo(int i)23 BOOST_NOINLINE void foo(int i) {
24     bar(--i);
25 }
26 
27 //[getting_started_assert_handlers
28 
29 // BOOST_ENABLE_ASSERT_DEBUG_HANDLER is defined for the whole project
30 #include <stdexcept>    // std::logic_error
31 #include <iostream>     // std::cerr
32 #include <boost/stacktrace.hpp>
33 
34 namespace boost {
assertion_failed_msg(char const * expr,char const * msg,char const * function,char const *,long)35     inline void assertion_failed_msg(char const* expr, char const* msg, char const* function, char const* /*file*/, long /*line*/) {
36         std::cerr << "Expression '" << expr << "' is false in function '" << function << "': " << (msg ? msg : "<...>") << ".\n"
37             << "Backtrace:\n" << boost::stacktrace::stacktrace() << '\n';
38         /*<-*/ std::exit(0); /*->*/
39         /*=std::abort();*/
40     }
41 
assertion_failed(char const * expr,char const * function,char const * file,long line)42     inline void assertion_failed(char const* expr, char const* function, char const* file, long line) {
43         ::boost::assertion_failed_msg(expr, 0 /*nullptr*/, function, file, line);
44     }
45 } // namespace boost
46 //]
47 
48 
main()49 int main() {
50     foo(5);
51 
52     return 2;
53 }
54 
55 
56