From f5d9662946774b51b7f353c190f980b1f2147bbd Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 3 Jun 2019 02:46:59 +0300 Subject: [PATCH] Support -fno-exceptions --- include/boost/variant2/variant.hpp | 15 +++++++++++++++ test/Jamfile | 14 ++++++++++++++ test/throw_exception.cpp | 19 +++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 test/throw_exception.cpp diff --git a/include/boost/variant2/variant.hpp b/include/boost/variant2/variant.hpp index ab7fcab..d661ca5 100644 --- a/include/boost/variant2/variant.hpp +++ b/include/boost/variant2/variant.hpp @@ -29,6 +29,13 @@ namespace boost { + +#ifdef BOOST_NO_EXCEPTIONS + +BOOST_NORETURN void throw_exception( std::exception const & e ); // user defined + +#endif + namespace variant2 { @@ -53,7 +60,15 @@ namespace detail BOOST_NORETURN inline void throw_bad_variant_access() { +#ifdef BOOST_NO_EXCEPTIONS + + boost::throw_exception( bad_variant_access() ); + +#else + throw bad_variant_access(); + +#endif } } // namespace detail diff --git a/test/Jamfile b/test/Jamfile index 18642a0..1093712 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -89,3 +89,17 @@ run variant_convert_construct_throw.cpp ; run variant_copy_assign_throw.cpp ; run variant_move_assign_throw.cpp ; + +local NX = + off + msvc:/wd4530 + msvc:/wd4577 + ; + +run variant_get_by_index.cpp throw_exception.cpp : : : $(NX) : variant_get_by_index_nx ; +compile variant_get_by_index_cx.cpp : $(NX) : variant_get_by_index_cx_nx ; + +run variant_get_by_type.cpp throw_exception.cpp : : : $(NX) : variant_get_by_type_nx ; +compile variant_get_by_type_cx.cpp : $(NX) : variant_get_by_type_cx_nx ; + +run variant_subset.cpp throw_exception.cpp : : : $(NX) : variant_subset_nx ; diff --git a/test/throw_exception.cpp b/test/throw_exception.cpp new file mode 100644 index 0000000..7414970 --- /dev/null +++ b/test/throw_exception.cpp @@ -0,0 +1,19 @@ + +// Copyright 2019 Peter Dimov. +// +// Distributed under the Boost Software License, Version 1.0. +// http://www.boost.org/LICENSE_1_0.txt + +#include +#include + +namespace boost +{ + +void throw_exception( std::exception const & e ) +{ + std::fprintf( stderr, "Exception: %s\n", e.what() ); + std::terminate(); +} + +} // namespace boost