From 4d02f399a2781adee31487c089a97efa2c7fdd9d Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Mon, 17 Dec 2018 23:03:53 +0900 Subject: [PATCH 1/2] add temporary to receive rvalue --- tests/test_get_related_func.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tests/test_get_related_func.cpp b/tests/test_get_related_func.cpp index 2feebdd..c47d8b6 100644 --- a/tests/test_get_related_func.cpp +++ b/tests/test_get_related_func.cpp @@ -68,9 +68,14 @@ BOOST_AUTO_TEST_CASE(test_expect) { toml::value v1(42); toml::value v2(3.14); - BOOST_CHECK_EQUAL(42, toml::expect(v1).unwrap_or(0)); - BOOST_CHECK_EQUAL( 0, toml::expect(v2).unwrap_or(0)); - BOOST_CHECK_EQUAL("42", toml::expect(v1).map([](int i){return std::to_string(i);}).unwrap_or(std::string("none"))); - BOOST_CHECK_EQUAL("none", toml::expect(v2).map([](int i){return std::to_string(i);}).unwrap_or(std::string("none"))); + const auto v1_or_0 = toml::expect(v1).unwrap_or(0); + const auto v2_or_0 = toml::expect(v2).unwrap_or(0); + BOOST_CHECK_EQUAL(42, v1_or_0); + BOOST_CHECK_EQUAL( 0, v2_or_0); + + const auto v1_or_none = toml::expect(v1).map([](int i){return std::to_string(i);}).unwrap_or(std::string("none")); + const auto v2_or_none = toml::expect(v2).map([](int i){return std::to_string(i);}).unwrap_or(std::string("none")); + BOOST_CHECK_EQUAL("42", v1_or_none); + BOOST_CHECK_EQUAL("none", v2_or_none); } } From e3217cd572ee8208bcb5e683f34350fc399c7ab7 Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Mon, 17 Dec 2018 23:17:45 +0900 Subject: [PATCH 2/2] quit returning rvalue ref from unwrap_or --- toml/result.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/toml/result.hpp b/toml/result.hpp index 7fa6b94..c174578 100644 --- a/toml/result.hpp +++ b/toml/result.hpp @@ -406,10 +406,10 @@ struct result if(is_err()) {return opt;} return this->succ.value; } - value_type&& unwrap_or(value_type opt) && + value_type unwrap_or(value_type opt) && { - if(is_err()) {return std::move(opt);} - return std::move(this->succ.value); + if(is_err()) {return opt;} + return this->succ.value; } error_type& unwrap_err() &