Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-11-15 09:20:27

0001 /* Error observers for a very simple basic_result type
0002 (C) 2017-2023 Niall Douglas <http://www.nedproductions.biz/> (2 commits)
0003 File Created: Oct 2017
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_BASIC_RESULT_ERROR_OBSERVERS_HPP
0032 #define BOOST_OUTCOME_BASIC_RESULT_ERROR_OBSERVERS_HPP
0033 
0034 #include "basic_result_storage.hpp"
0035 
0036 BOOST_OUTCOME_V2_NAMESPACE_EXPORT_BEGIN
0037 
0038 namespace detail
0039 {
0040   template <class Base, class EC, class NoValuePolicy> class basic_result_error_observers : public Base
0041   {
0042   public:
0043     using error_type = EC;
0044     using Base::Base;
0045 
0046     constexpr error_type &assume_error() & noexcept
0047     {
0048       NoValuePolicy::narrow_error_check(static_cast<basic_result_error_observers &>(*this));
0049       return this->_state._error;
0050     }
0051     constexpr const error_type &assume_error() const & noexcept
0052     {
0053       NoValuePolicy::narrow_error_check(static_cast<const basic_result_error_observers &>(*this));
0054       return this->_state._error;
0055     }
0056     constexpr error_type &&assume_error() && noexcept
0057     {
0058       NoValuePolicy::narrow_error_check(static_cast<basic_result_error_observers &&>(*this));
0059       return static_cast<error_type &&>(this->_state._error);
0060     }
0061     constexpr const error_type &&assume_error() const && noexcept
0062     {
0063       NoValuePolicy::narrow_error_check(static_cast<const basic_result_error_observers &&>(*this));
0064       return static_cast<const error_type &&>(this->_state._error);
0065     }
0066 
0067     constexpr error_type &error() &
0068     {
0069       NoValuePolicy::wide_error_check(static_cast<basic_result_error_observers &>(*this));
0070       return this->_state._error;
0071     }
0072     constexpr const error_type &error() const &
0073     {
0074       NoValuePolicy::wide_error_check(static_cast<const basic_result_error_observers &>(*this));
0075       return this->_state._error;
0076     }
0077     constexpr error_type &&error() &&
0078     {
0079       NoValuePolicy::wide_error_check(static_cast<basic_result_error_observers &&>(*this));
0080       return static_cast<error_type &&>(this->_state._error);
0081     }
0082     constexpr const error_type &&error() const &&
0083     {
0084       NoValuePolicy::wide_error_check(static_cast<const basic_result_error_observers &&>(*this));
0085       return static_cast<const error_type &&>(this->_state._error);
0086     }
0087   };
0088   template <class Base, class NoValuePolicy> class basic_result_error_observers<Base, void, NoValuePolicy> : public Base
0089   {
0090   public:
0091     using Base::Base;
0092 
0093     constexpr void assume_error() & noexcept { NoValuePolicy::narrow_error_check(static_cast<basic_result_error_observers &>(*this)); }
0094     constexpr void assume_error() const & noexcept { NoValuePolicy::narrow_error_check(static_cast<const basic_result_error_observers &>(*this)); }
0095     constexpr void assume_error() && noexcept { NoValuePolicy::narrow_error_check(static_cast<basic_result_error_observers &&>(*this)); }
0096     constexpr void assume_error() const && noexcept { NoValuePolicy::narrow_error_check(static_cast<const basic_result_error_observers &&>(*this)); }
0097 
0098     constexpr void error() & { NoValuePolicy::wide_error_check(static_cast<basic_result_error_observers &>(*this)); }
0099     constexpr void error() const & { NoValuePolicy::wide_error_check(static_cast<const basic_result_error_observers &>(*this)); }
0100     constexpr void error() && { NoValuePolicy::wide_error_check(static_cast<basic_result_error_observers &&>(*this)); }
0101     constexpr void error() const && { NoValuePolicy::wide_error_check(static_cast<const basic_result_error_observers &&>(*this)); }
0102   };
0103 }  // namespace detail
0104 BOOST_OUTCOME_V2_NAMESPACE_END
0105 
0106 #endif