diff --git a/README.md b/README.md index a4c26bdc..c199268c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -Embedded Template Library (ETL) -------------------------- +# ![alt text](https://github.com/ETLCPP/etl/blob/master/images/etl64.png?raw=true) Embedded Template Library (ETL) ![GitHub release (latest by date)](https://img.shields.io/github/v/release/jwellbelove/etl) [![Release date](https://img.shields.io/github/release-date/jwellbelove/etl?color=%231182c3)](https://img.shields.io/github/release-date/jwellbelove/etl?color=%231182c3) @@ -10,7 +9,6 @@ Embedded Template Library (ETL) ![GitHub Repo stars](https://img.shields.io/github/stars/ETLCPP/etl?style=flat) ![CI](https://github.com/ETLCPP/etl/actions/workflows/msvc.yml/badge.svg?branch=master) -[![Build status](https://ci.appveyor.com/api/projects/status/b7jgecv7unqjw4u0/branch/master?svg=true)](https://ci.appveyor.com/project/jwellbelove/etl/branch/master) ![CI](https://github.com/ETLCPP/etl/actions/workflows/gcc-c++11.yml/badge.svg?branch=master) ![CI](https://github.com/ETLCPP/etl/actions/workflows/gcc-c++14.yml/badge.svg?branch=master) diff --git a/include/etl/tuple.h b/include/etl/tuple.h index c4a9440b..ffc6db11 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); + } } }