From 2c1faa1bf962ff958fd5101c27eaefc02b140ab4 Mon Sep 17 00:00:00 2001 From: mchodzikiewicz <33954140+mchodzikiewicz@users.noreply.github.com> Date: Mon, 2 Mar 2020 13:32:56 +0100 Subject: [PATCH] Add optional::has_value() to fulfill C++17's API (#195) --- include/etl/optional.h | 9 +++++++++ test/test_optional.cpp | 11 +++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/etl/optional.h b/include/etl/optional.h index 958acf2f..b95cde16 100644 --- a/include/etl/optional.h +++ b/include/etl/optional.h @@ -351,6 +351,15 @@ namespace etl return valid; } + //*************************************************************************** + // Check whether optional contains value + //*************************************************************************** + ETL_CONSTEXPR bool has_value() const ETL_NOEXCEPT + { + return valid; + } + + //*************************************************************************** /// Get a reference to the value. //*************************************************************************** diff --git a/test/test_optional.cpp b/test/test_optional.cpp index 77b0b687..7e02c390 100644 --- a/test/test_optional.cpp +++ b/test/test_optional.cpp @@ -65,28 +65,39 @@ namespace CHECK(!bool(data1)); CHECK(!bool(data2)); + CHECK(!data1.has_value()); + CHECK(!data2.has_value()); + data1 = Data("Hello"); CHECK(bool(data1)); + CHECK(data1.has_value()); CHECK_EQUAL(Data("Hello"), data1); data1 = data2; CHECK(!bool(data1)); CHECK(!bool(data2)); + CHECK(!data1.has_value()); + CHECK(!data2.has_value()); data1 = Data("World"); data2 = data1; CHECK(bool(data1)); CHECK(bool(data2)); + CHECK(data1.has_value()); + CHECK(data2.has_value()); etl::optional data3(data1); CHECK(bool(data3)); + CHECK(data3.has_value()); CHECK_EQUAL(data1, data3); etl::optional data4; data4 = Data("Hello"); data4 = etl::nullopt; CHECK(!bool(data4)); + CHECK(!data4.has_value()); + } //*************************************************************************