Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 09:59:09

0001 /* Traits for Outcome
0002 (C) 2018-2024 Niall Douglas <http://www.nedproductions.biz/> (3 commits)
0003 File Created: March 2018
0004 
0005 
0006 Boost Software License - Version 1.0 - August 17th, 2003
0007 
0008 Permission is hereby granted, free of charge, to any person or organization
0009 obtaining a copy of the software and accompanying documentation covered by
0010 this license (the "Software") to use, reproduce, display, distribute,
0011 execute, and transmit the Software, and to prepare derivative works of the
0012 Software, and to permit third-parties to whom the Software is furnished to
0013 do so, all subject to the following:
0014 
0015 The copyright notices in the Software and this entire statement, including
0016 the above license grant, this restriction and the following disclaimer,
0017 must be included in all copies of the Software, in whole or in part, and
0018 all derivative works of the Software, unless such copies or derivative
0019 works are solely in the form of machine-executable object code generated by
0020 a source language processor.
0021 
0022 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
0023 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
0024 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
0025 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
0026 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
0027 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
0028 DEALINGS IN THE SOFTWARE.
0029 */
0030 
0031 #ifndef BOOST_OUTCOME_TRAIT_STD_EXCEPTION_HPP
0032 #define BOOST_OUTCOME_TRAIT_STD_EXCEPTION_HPP
0033 
0034 #include "../config.hpp"
0035 
0036 #include <exception>
0037 
0038 BOOST_OUTCOME_V2_NAMESPACE_BEGIN
0039 
0040 namespace policy
0041 {
0042   namespace detail
0043   {
0044     /* Pass through `make_exception_ptr` function for `std::exception_ptr`.
0045     */
0046     inline std::exception_ptr make_exception_ptr(std::exception_ptr v) { return v; }
0047 
0048     // Try ADL, if not use fall backs above
0049     template <class T> constexpr inline decltype(auto) exception_ptr(T &&v) { return make_exception_ptr(std::forward<T>(v)); }
0050   }  // namespace detail
0051 
0052   /*! AWAITING HUGO JSON CONVERSION TOOL 
0053 SIGNATURE NOT RECOGNISED
0054 */
0055   template <class T> constexpr inline decltype(auto) exception_ptr(T &&v) { return detail::exception_ptr(std::forward<T>(v)); }
0056 
0057   namespace detail
0058   {
0059     template <bool has_error_payload> struct _rethrow_exception
0060     {
0061       template <class Exception> explicit _rethrow_exception(Exception && /*unused*/)  // NOLINT
0062       {
0063       }
0064     };
0065     template <> struct _rethrow_exception<true>
0066     {
0067       template <class Exception> explicit _rethrow_exception(Exception &&excpt)  // NOLINT
0068       {
0069         // ADL
0070         rethrow_exception(policy::exception_ptr(std::forward<Exception>(excpt)));
0071       }
0072     };
0073   }  // namespace detail
0074 }  // namespace policy
0075 
0076 namespace trait
0077 {
0078   namespace detail
0079   {
0080     // Shortcut this for lower build impact
0081     template <> struct _is_exception_ptr_available<std::exception_ptr>
0082     {
0083       static constexpr bool value = true;
0084       using type = std::exception_ptr;
0085     };
0086   }  // namespace detail
0087 
0088   // std::exception_ptr is an error type
0089   template <> struct is_error_type<std::exception_ptr>
0090   {
0091     static constexpr bool value = true;
0092   };
0093 
0094 }  // namespace trait
0095 
0096 BOOST_OUTCOME_V2_NAMESPACE_END
0097 
0098 #endif