| 157 | result_discriminant what_; |
| 158 | |
| 159 | struct error_result |
| 160 | { |
| 161 | error_result( error_result && ) = default; |
| 162 | error_result( error_result const & ) = delete; |
| 163 | error_result & operator=( error_result const & ) = delete; |
| 164 | |
| 165 | result & r_; |
| 166 | |
| 167 | error_result( result & r ) noexcept: |
| 168 | r_(r) |
| 169 | { |
| 170 | } |
| 171 | |
| 172 | template <class U> |
| 173 | operator result<U>() noexcept |
| 174 | { |
| 175 | result_discriminant const what = r_.what_; |
| 176 | switch(auto k = what.kind()) |
| 177 | { |
| 178 | case result_discriminant::val: |
| 179 | return result<U>(error_id()); |
| 180 | case result_discriminant::err_id_capture_list: |
| 181 | #if BOOST_LEAF_CFG_CAPTURE |
| 182 | return result<U>(what.get_error_id().value(), std::move(r_.cap_)); |
| 183 | #else |
| 184 | BOOST_LEAF_ASSERT(0); // Possible ODR violation. |
| 185 | #endif |
| 186 | default: |
| 187 | BOOST_LEAF_ASSERT(k == result_discriminant::err_id); |
| 188 | (void) k; |
| 189 | case result_discriminant::err_id_zero: |
| 190 | return result<U>(what.get_error_id()); |
| 191 | } |
| 192 | } |
| 193 | |
| 194 | operator error_id() const noexcept |
| 195 | { |
| 196 | result_discriminant const what = r_.what_; |
| 197 | return what.kind() == result_discriminant::val? |
| 198 | error_id() : |
| 199 | what.get_error_id(); |
| 200 | } |
| 201 | }; |
| 202 | |
| 203 | void destroy() const noexcept |
| 204 | { |
nothing calls this directly
no test coverage detected