Commit Graph

183 Commits

Author SHA1 Message Date
7e8f0cd9bb copy_exception/make_exception_ptr implemented via wrapexcept rather than throw/catch 2020-08-11 19:40:30 -07:00
330008445c make_exception_ptr 2020-07-06 17:09:06 -07:00
63b57749a2 Mark error_info_container_impl final. (#27)
This should allow for better code optimization and also silence
compiler warnings about non-virtual destructor.
2020-04-30 15:05:51 -07:00
ff0bcc1d85 Added #pragma clang system_header 2020-04-06 18:23:52 -07:00
9197b6a880 Updated copyright message 2020-02-17 18:57:47 -08:00
93692697ef Fixing MSVC-11 compilation error, thanks Lastique 2020-02-09 16:52:49 -08:00
3f6ff1a8bf std_exception_ptr_wrapper 2020-01-29 14:02:40 -08:00
af98afb3d1 Attempt to solve issue #10 (#24)
* Attempt to solve issue #10

In boost::current_exception(), after all supported types of exception have
been checked for, a boost::unknown_exception is stored in the
boost::exception_ptr as a last resort to signal that an exception was indeed
stored, but that the actual type and value of the exception was lost.

Now, in case C++11 std::current_exception() is supported, the
std::exception_ptr result of calling std::current_exception() is what
gets stored inside the boost::exception_ptr. Later, inside
boost::rethrow_exception, the std::exception_ptr is retrieved from
the boost::exception_ptr and whatever exception it stores is thrown via
std::rethrow_exception().

The main benefit is than now any exception thrown via plain 'throw'
can be trasnported via boost::exception_ptr. Before this change it was
required that the throw site either used boost::enable_current_exception()
or boost::throw_exception() or threw an exception type inheriting from
boost::exception, which was impossible for third party software
that does not use Boost.Exception.

The detection of std::current_exception() is currently done via config macro
BOOST_NO_CXX11_NOEXCEPT, assuming that if 'noexcept' is supported then
std::exception_ptr is also supported. A better solution would require a new
dedicated macro in Boost.Config.

* Detect support for std::current_exception() via config macro BOOST_NO_CXX11_HDR_EXCEPTION

The temporary solution via BOOST_NO_CXX11_NOEXCEPT was an ugly hack
that is no longer necessary now that Boost.Config has
BOOST_NO_CXX11_HDR_EXCEPTION (pending merge to develop).

* Attempt to solve issue #10

In boost::current_exception(), after all supported types of exception have
been checked for, a boost::unknown_exception is stored in the
boost::exception_ptr as a last resort to signal that an exception was indeed
stored, but that the actual type and value of the exception was lost.

Now, in case C++11 std::current_exception() is supported, the
std::exception_ptr result of calling std::current_exception() is what
gets stored inside the boost::exception_ptr. Later, inside
boost::rethrow_exception, the std::exception_ptr is retrieved from
the boost::exception_ptr and whatever exception it stores is thrown via
std::rethrow_exception().

The main benefit is than now any exception thrown via plain 'throw'
can be trasnported via boost::exception_ptr. Before this change it was
required that the throw site either used boost::enable_current_exception()
or boost::throw_exception() or threw an exception type inheriting from
boost::exception, which was impossible for third party software
that does not use Boost.Exception.

The detection of std::current_exception() is currently done via config macro
BOOST_NO_CXX11_NOEXCEPT, assuming that if 'noexcept' is supported then
std::exception_ptr is also supported. A better solution would require a new
dedicated macro in Boost.Config.

* Detect support for std::current_exception() via config macro BOOST_NO_CXX11_HDR_EXCEPTION

The temporary solution via BOOST_NO_CXX11_NOEXCEPT was an ugly hack
that is no longer necessary now that Boost.Config has
BOOST_NO_CXX11_HDR_EXCEPTION (pending merge to develop).

* Document detection of C++11 std::current_exception through BOOST_NO_CXX11_HDR_EXCEPTION

* Added dist: trusty for Travis config, as recommended by pdimov in issue #10

* Stupid gcc 4.7 and 4.8 are confused initializing a reference with braces, using equal sign hoping it works (tested similar code on godbolt).
2020-01-29 13:41:48 -08:00
8e61e8e9fd #include guards prefixed with BOOST_EXCEPTION_ 2019-12-21 14:15:17 -08:00
90694bc3b9 Guard diagnostic_information against null what() 2019-03-11 17:56:55 +01:00
1a7ac9174a Merge pull request #11 from danieljames/fix-visual-c-7.1
Fully qualify error_info_base for Visual C++ 7.1
2019-03-02 22:14:27 -08:00
5025e2ca18 Merge pull request #18 from apolukhin/antoshkka/exception-type-from-ptr
Extract exception type name from std::exception_ptr on libstdc++
2019-03-02 22:10:00 -08:00
607268dd8e Replaced throw() with BOOST_NOEXCEPT_OR_NOTHROW
With throw(), Visual Studio 2017 emitted a warning "C26439 SPECIAL_NOEXCEPT". Reproducible at least if code analysis was set to level: "Microsoft Native Recommended Rules".

https://docs.microsoft.com/en-us/visualstudio/code-quality/c26439?view=vs-2017
2019-01-28 09:48:53 +02:00
386f5507cb extract exception type name from std::exception_ptr on libstdc++ 2019-01-15 23:55:37 +03:00
2a2557b903 Fully qualify error_info_base for Visual C++ 7.1
Test are failing on Visual C++ 7.1, I think because it's not importing
error_info_base into the class' namespace, so hopefully this will fix it. I
don't have access to the compiler, so I'm not sure.
2018-04-07 15:01:58 +01:00
38cdb50eb2 Deleted N3757 2017-05-06 10:54:42 -07:00
32d831c4b2 restoring non-intrusive exception_ptr code 2017-04-23 17:58:28 -07:00
bed7f3147f Typo 2017-03-30 17:20:21 -07:00
c8fbbb9d11 Merge branch 'develop' of https://github.com/boostorg/exception into develop 2017-03-30 16:56:29 -07:00
464e7f9d09 error_info rvalue reference constructors changed to use is_nothrow_move_constructible 2017-03-30 16:56:13 -07:00
991d600f01 Fixing bug in exception_ptr cloning of error_info objects. 2017-03-15 11:39:42 -07:00
10550b69d4 Deleting accidentally committed file. 2017-03-13 16:08:34 -07:00
cf05dc079b Removing non-intrusive exception_ptr support. 2017-03-13 15:07:09 -07:00
4ea8555871 Removed double-including of config. 2017-02-21 11:41:51 -08:00
36af19fa50 Merge branch 'develop' of https://github.com/boostorg/exception into develop 2017-02-20 18:31:48 -08:00
0eee187876 #include config before anything else 2017-02-20 18:23:36 -08:00
e8877d4837 Workaround for 11874 2017-01-03 15:25:52 -08:00
972667f52e Tweaks to try to defeat g++4.6.3 2017-01-03 14:35:11 -08:00
406d3c87f7 Maybe fixing 11874 2017-01-03 12:17:27 -08:00
14d3b01c60 Fixing more struct/class discrepancies. 2016-11-02 23:53:42 -07:00
6cf231330a Ticket #12059 2016-10-26 12:35:25 -07:00
e1378f7aef Ticket #12553, plus tabs converted to spaces. 2016-10-26 11:51:40 -07:00
27598f92db Configuration option to allow Boost Exception to use std::shared_ptr instead of boost::shared_ptr. 2016-09-28 16:53:43 -07:00
c1e2284628 Improved errno printing in diagnostic information messages. 2016-07-12 19:21:53 -07:00
c1dc3b8dcb Included missing declaration before specialization of set_info_rv. 2016-06-05 22:33:02 -07:00
1afb7e0372 Ticket #12230 2016-05-31 14:46:13 -07:00
5a040eedf5 rvalue references support in error_info 2015-03-24 15:44:28 -07:00
5dea76a301 Port to Boost.Core demangle() and typeinfo. 2014-06-11 22:02:59 +04:00
8931eb2e0d Merge pull request #1 from Lastique/develop
Re-enable type name demangling (thanks Lastique)
2014-06-04 23:29:56 -07:00
73c3cb7e46 Switch to BOOST_NORETURN macro
Switch to BOOST_NORETURN macro provided by Boost.Config.
2014-06-05 01:30:40 +04:00
a129725e3e Switched from BOOST_ATTRIBUTE_NORETURN to BOOST_NORETURN. 2014-06-05 00:50:04 +04:00
7f937491f0 Remove headers that have been moved to throw_exception. 2014-06-03 03:05:06 +03:00
4edba2f8be Revert "Exception: Remove obsolete GCC version checks."
This reverts commit b2221bf92d.
2014-06-03 02:15:11 +03:00
8f097eb241 Comment fix. 2014-05-31 21:57:51 +04:00
7062572c8f Re-implemented type name demangling.
The new implementation does not depend on Boost.Units and is fully contained in Boost.Exception.
2014-05-31 21:54:52 +04:00
b2221bf92d Exception: Remove obsolete GCC version checks.
[SVN r86074]
2013-09-30 16:01:02 +00:00
432b3090fe Disabled demangling for now, to break the dependency: Exeception -> Units -> Algorithms -> Range -> Concepts. UGH!
[SVN r85782]
2013-09-19 05:53:38 +00:00
ac5ebbcd45 Ticket #8947, thanks Maciej Florek
[SVN r85635]
2013-09-10 05:44:02 +00:00
2a68f099bf Ticket 9069, thanks sarum9in
[SVN r85634]
2013-09-10 05:05:41 +00:00
e97bcb4c56 N3757
[SVN r85538]
2013-08-31 23:24:40 +00:00