diff --git a/include/etl/tuple.h b/include/etl/tuple.h index c4a9440b..bca6aa51 100644 --- a/include/etl/tuple.h +++ b/include/etl/tuple.h @@ -559,9 +559,9 @@ namespace etl //********************************* /// Assign from lvalue pair tuple type. //********************************* - template , etl::enable_if_t = 0> + template (), etl::enable_if_t = 0> ETL_CONSTEXPR14 - tuple& operator =(pair& p) + tuple& operator =(ETL_OR_STD::pair& p) { get_value() = p.first; get_base().get_value() = p.second; @@ -572,9 +572,9 @@ namespace etl //********************************* /// Assign from const lvalue pair tuple type. //********************************* - template , etl::enable_if_t = 0> + template (), etl::enable_if_t = 0> ETL_CONSTEXPR14 - tuple& operator =(const pair& p) + tuple& operator =(const ETL_OR_STD::pair& p) { get_value() = p.first; get_base().get_value() = p.second; @@ -585,9 +585,9 @@ namespace etl //********************************* /// Assign from rvalue pair tuple type. //********************************* - template , etl::enable_if_t = 0> + template (), etl::enable_if_t = 0> ETL_CONSTEXPR14 - tuple& operator =(pair&& p) + tuple& operator =(ETL_OR_STD::pair&& p) { get_value() = etl::forward(p.first); get_base().get_value() = etl::forward(p.second); @@ -598,12 +598,12 @@ namespace etl //********************************* /// Assign from const rvalue pair tuple type. //********************************* - template , etl::enable_if_t = 0> + template (), etl::enable_if_t = 0> ETL_CONSTEXPR14 - tuple& operator =(const pair&& p) + tuple& operator =(const ETL_OR_STD::pair&& p) { - get_value() = etl::forward(p.first); - get_base().get_value() = etl::forward(p.second); + get_value() = p.first; + get_base().get_value() = p.second; return *this; } diff --git a/test/test_tuple.cpp b/test/test_tuple.cpp index 01a4ca1f..1a292dcc 100644 --- a/test/test_tuple.cpp +++ b/test/test_tuple.cpp @@ -756,5 +756,67 @@ namespace CHECK_EQUAL(etl::get<2>(tp), s); } #endif + + //************************************************************************* + TEST(test_assign_from_lvalue_pair) + { + ETL_OR_STD::pair p(1, Data("2")); + + etl::tuple tp(0, Data("")); + + tp = p; + + int i = etl::get<0>(tp); + Data d = etl::get<1>(tp); + + CHECK_EQUAL(1, i); + CHECK_EQUAL(std::string("2"), d.value); + } + + //************************************************************************* + TEST(test_assign_from_const_lvalue_pair) + { + const ETL_OR_STD::pair p(1, Data("2")); + + etl::tuple tp(0, Data("")); + + tp = p; + + int i = etl::get<0>(tp); + Data d = etl::get<1>(tp); + + CHECK_EQUAL(1, i); + CHECK_EQUAL(std::string("2"), d.value); + } + + //************************************************************************* + TEST(test_assign_from_rvalue_pair) + { + etl::tuple tp(0, Data("")); + + tp = ETL_OR_STD::pair(1, Data("2")); + + int i = etl::get<0>(tp); + Data d = etl::get<1>(tp); + + CHECK_EQUAL(1, i); + CHECK_EQUAL(std::string("2"), d.value); + } + + //************************************************************************* + TEST(test_assign_from_const_rvalue_pair) + { + const ETL_OR_STD::pair p(1, Data("2")); + + etl::tuple tp(0, Data("")); + + tp = static_cast&&>(p); + + int i = etl::get<0>(tp); + Data d = etl::get<1>(tp); + + CHECK_EQUAL(1, i); + CHECK_EQUAL(std::string("2"), d.value); + } } }