From c7c5352325c39beb59a337d61e4734c84673d2ef Mon Sep 17 00:00:00 2001 From: Martchus Date: Tue, 18 Feb 2020 19:20:24 +0100 Subject: [PATCH] Use a universal reference to implement dereferenceMaybe() --- misc/traits.h | 16 ++-------------- tests/traitstests.cpp | 5 +++-- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/misc/traits.h b/misc/traits.h index 9847d3d..fcb13c3 100644 --- a/misc/traits.h +++ b/misc/traits.h @@ -159,25 +159,13 @@ CPP_UTILITIES_TRAITS_DEFINE_TYPE_CHECK(IsIteratable, void(*begin(std::declval()))); /// \brief Dereferences the specified \a value if possible; otherwise just returns \a value itself. -template > * = nullptr> constexpr auto &dereferenceMaybe(T &value) +template > * = nullptr> constexpr auto &dereferenceMaybe(T &&value) { return *value; } /// \brief Dereferences the specified \a value if possible; otherwise just returns \a value itself. -template > * = nullptr> constexpr auto &dereferenceMaybe(T &value) -{ - return value; -} - -/// \brief Dereferences the specified \a value if possible; otherwise just returns \a value itself. -template > * = nullptr> constexpr const auto &dereferenceMaybe(const T &value) -{ - return *value; -} - -/// \brief Dereferences the specified \a value if possible; otherwise just returns \a value itself. -template > * = nullptr> constexpr const auto &dereferenceMaybe(const T &value) +template > * = nullptr> constexpr auto &dereferenceMaybe(T &&value) { return value; } diff --git a/tests/traitstests.cpp b/tests/traitstests.cpp index df54713..158983b 100644 --- a/tests/traitstests.cpp +++ b/tests/traitstests.cpp @@ -133,8 +133,9 @@ CPPUNIT_TEST_SUITE_REGISTRATION(TraitsTest); */ void TraitsTest::testDereferenceMaybe() { - const auto someString = "foo"s; - const auto someSmartPointer = make_unique("foo"); + auto someString = "foo"s; + auto someSmartPointer = make_unique("foo"); CPPUNIT_ASSERT_EQUAL("foo"s, dereferenceMaybe(someString)); CPPUNIT_ASSERT_EQUAL("foo"s, dereferenceMaybe(someSmartPointer)); + CPPUNIT_ASSERT_EQUAL("foo"s, dereferenceMaybe(make_unique("foo"))); }