From 5354d3512e9fe27f2e4b752f6d9c4806db757d1d Mon Sep 17 00:00:00 2001 From: Denis Blank Date: Sun, 25 Nov 2018 18:01:15 +0100 Subject: [PATCH] Fix the MSVC/Clang build even more --- include/continuable/continuable-result.hpp | 21 +++++++------------ .../detail/utility/result-trait.hpp | 3 ++- .../single/test-continuable-result.cpp | 3 +++ 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/include/continuable/continuable-result.hpp b/include/continuable/continuable-result.hpp index c8e1477..b52f99c 100644 --- a/include/continuable/continuable-result.hpp +++ b/include/continuable/continuable-result.hpp @@ -95,22 +95,17 @@ class result { detail::container::flat_variant variant_; public: - template , - // I know this is a little bit hacky but it's a working version - // of a default constructor that is not present when the class is - // instantiated with zero arguments. - std::enable_if_t<((sizeof(A) * 0 + sizeof...(T)) > 0)>* = nullptr, - std::enable_if_t< - std::is_same>::value>* = nullptr> - explicit result(A = {}) { - } - explicit result(result const&) = default; - explicit result(result&&) = default; + result() = default; + result(result const&) = default; + result(result&&) = default; result& operator=(result const&) = default; result& operator=(result&&) = default; ~result() = default; - explicit result(T... values) : variant_(trait::wrap(std::move(values)...)) { + template ()...))* = nullptr> + explicit result(Args&&... values) + : variant_(trait::wrap(std::forward(values)...)) { } explicit result(exception_t exception) : variant_(std::move(exception)) { } @@ -192,7 +187,7 @@ template <> struct is_result : std::true_type {}; template -constexpr auto make_result(T&&... values) { +auto make_result(T&&... values) { return result...>(std::forward(values)...); } diff --git a/include/continuable/detail/utility/result-trait.hpp b/include/continuable/detail/utility/result-trait.hpp index f39010d..a0429ce 100644 --- a/include/continuable/detail/utility/result-trait.hpp +++ b/include/continuable/detail/utility/result-trait.hpp @@ -61,7 +61,8 @@ template struct result_trait { using value_t = std::tuple; - static auto wrap(First first, Second second, Rest... rest) { + static std::tuple wrap(First first, Second second, + Rest... rest) { return std::make_tuple(std::move(first), std::move(second), std::move(rest)...); } diff --git a/test/unit-test/single/test-continuable-result.cpp b/test/unit-test/single/test-continuable-result.cpp index 28be0c5..426e1ed 100644 --- a/test/unit-test/single/test-continuable-result.cpp +++ b/test/unit-test/single/test-continuable-result.cpp @@ -29,6 +29,7 @@ using cti::exception_t; using cti::result; +using cti::make_result; static int const CANARY = 373671; @@ -67,6 +68,8 @@ TYPED_TEST(result_all_tests, is_default_constructible) { result<> e1; result e2; result e3; + + auto empty = make_result(); } TYPED_TEST(result_all_tests, can_carry_errors) {