mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-01-05 07:11:08 +00:00
add message to bad_unwrap
This commit is contained in:
parent
df314da751
commit
b3b5682cc0
@ -1,8 +1,11 @@
|
|||||||
#ifndef TOML11_RESULT_H
|
#ifndef TOML11_RESULT_H
|
||||||
#define TOML11_RESULT_H
|
#define TOML11_RESULT_H
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
#include <stdexcept>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <new>
|
#include <new>
|
||||||
|
#include <string>
|
||||||
|
#include <sstream>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
namespace toml
|
namespace toml
|
||||||
@ -365,17 +368,29 @@ struct result
|
|||||||
|
|
||||||
value_type& unwrap() &
|
value_type& unwrap() &
|
||||||
{
|
{
|
||||||
if(is_err()) {throw std::runtime_error("result: bad unwrap");}
|
if(is_err())
|
||||||
|
{
|
||||||
|
throw std::runtime_error("result: bad unwrap: " +
|
||||||
|
format_error(this->as_err()));
|
||||||
|
}
|
||||||
return this->succ.value;
|
return this->succ.value;
|
||||||
}
|
}
|
||||||
value_type const& unwrap() const&
|
value_type const& unwrap() const&
|
||||||
{
|
{
|
||||||
if(is_err()) {throw std::runtime_error("result: bad unwrap");}
|
if(is_err())
|
||||||
|
{
|
||||||
|
throw std::runtime_error("result: bad unwrap: " +
|
||||||
|
format_error(this->as_err()));
|
||||||
|
}
|
||||||
return this->succ.value;
|
return this->succ.value;
|
||||||
}
|
}
|
||||||
value_type&& unwrap() &&
|
value_type&& unwrap() &&
|
||||||
{
|
{
|
||||||
if(is_err()) {throw std::runtime_error("result: bad unwrap");}
|
if(is_err())
|
||||||
|
{
|
||||||
|
throw std::runtime_error("result: bad unwrap: " +
|
||||||
|
format_error(this->as_err()));
|
||||||
|
}
|
||||||
return std::move(this->succ.value);
|
return std::move(this->succ.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -541,6 +556,18 @@ struct result
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
static std::string format_error(std::exception const& excpt)
|
||||||
|
{
|
||||||
|
return std::string(excpt.what());
|
||||||
|
}
|
||||||
|
template<typename U, typename std::enable_if<!std::is_base_of<
|
||||||
|
std::exception, U>::value, std::nullptr_t>::type = nullptr>
|
||||||
|
static std::string format_error(U const& others)
|
||||||
|
{
|
||||||
|
std::ostringstream oss; oss << others;
|
||||||
|
return oss.str();
|
||||||
|
}
|
||||||
|
|
||||||
void cleanup() noexcept
|
void cleanup() noexcept
|
||||||
{
|
{
|
||||||
if(this->is_ok_) {this->succ.~success_type();}
|
if(this->is_ok_) {this->succ.~success_type();}
|
||||||
|
Loading…
Reference in New Issue
Block a user