From 012bbea249419ff5f5e49c51e9a59cc2c6a7ac72 Mon Sep 17 00:00:00 2001 From: Bryton Flecker Date: Wed, 21 Jan 2026 22:30:20 -0600 Subject: [PATCH] Fix etl::tuple template signature error in pair assignment operator (#1265) * Fix etl::tuple template signature error in pair assignment operator * Remove AppVeyor build status badge Removed AppVeyor build status badge from README. * Update README.md * Update etl::tuple to explicitly use etl::pair or std::pair in assignment operator * Added tests for etl::tuple assignment from pair --------- Co-authored-by: Bryton Flecker Co-authored-by: John Wellbelove --- include/etl/tuple.h | 20 +++++++-------- test/test_tuple.cpp | 62 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 10 deletions(-) diff --git a/include/etl/tuple.h b/include/etl/tuple.h index dbdbdaa2..dde08d13 100644 --- a/include/etl/tuple.h +++ b/include/etl/tuple.h @@ -562,9 +562,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; @@ -575,9 +575,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; @@ -588,9 +588,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); @@ -601,12 +601,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 d84940d9..918541e0 100644 --- a/test/test_tuple.cpp +++ b/test/test_tuple.cpp @@ -777,5 +777,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); + } } }