Merge branch 'hotfix/#737-etl-equal-specialisation-for-etl--span-is-deduced-wrongly-when-using-STL-and-CPP20' into development

This commit is contained in:
John Wellbelove 2023-08-04 11:58:08 +01:00
commit 5fbf6c7684
3 changed files with 34 additions and 8 deletions

View File

@ -560,6 +560,7 @@ namespace etl
//***************************************************************************
// equal
#if ETL_USING_STL && ETL_USING_CPP20
// Three parameter
template <typename TIterator1, typename TIterator2>
[[nodiscard]]
constexpr
@ -568,6 +569,7 @@ namespace etl
return std::equal(first1, last1, first2);
}
// Three parameter + predicate
template <typename TIterator1, typename TIterator2, typename TPredicate>
[[nodiscard]]
constexpr
@ -575,8 +577,27 @@ namespace etl
{
return std::equal(first1, last1, first2, predicate);
}
// Four parameter
template <typename TIterator1, typename TIterator2>
[[nodiscard]]
constexpr
bool equal(TIterator1 first1, TIterator1 last1, TIterator2 first2, TIterator2 last2)
{
return std::equal(first1, last1, first2, last2);
}
// Four parameter + Predicate
template <typename TIterator1, typename TIterator2, typename TPredicate>
[[nodiscard]]
constexpr
bool equal(TIterator1 first1, TIterator1 last1, TIterator2 first2, TIterator2 last2, TPredicate predicate)
{
return std::equal(first1, last1, first2, last2, predicate);
}
#else
// Not pointer types or not trivially copyable.
template <typename TIterator1, typename TIterator2>
ETL_NODISCARD
ETL_CONSTEXPR14
@ -639,8 +660,8 @@ namespace etl
// Four parameter, Predicate
template <typename TIterator1, typename TIterator2, typename TPredicate>
ETL_NODISCARD
ETL_CONSTEXPR14
bool equal(TIterator1 first1, TIterator1 last1, TIterator2 first2, TIterator2 last2, TPredicate predicate)
ETL_CONSTEXPR14
bool equal(TIterator1 first1, TIterator1 last1, TIterator2 first2, TIterator2 last2, TPredicate predicate)
{
while ((first1 != last1) && (first2 != last2))
{

View File

@ -42,12 +42,12 @@ namespace
{
static const size_t SIZE = 10UL;
typedef etl::array<int, SIZE> EtlData;
typedef std::array<int, SIZE> StlData;
typedef std::vector<int> StlVData;
using EtlData = etl::array<int, SIZE>;
using StlData = std::array<int, SIZE>;
using StlVData = std::vector<int>;
typedef etl::span<int> View;
typedef etl::span<const int> CView;
using View = etl::span<int>;
using CView = etl::span<const int>;
EtlData etldata = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
StlData stldata = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

View File

@ -47,6 +47,7 @@ namespace
typedef std::vector<int> StlVData;
typedef etl::span<int, 10U> View;
typedef etl::span<int, 9U> SView;
typedef etl::span<const int, 10U> CView;
EtlData etldata = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
@ -998,6 +999,7 @@ namespace
etl::array<int, 10> data1{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
etl::array<int, 10> data2{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
etl::array<int, 10> data3{ 0, 1, 2, 3, 4, 4, 6, 7, 8, 9 };
etl::array<int, 9> data4{ 0, 1, 2, 3, 4, 5, 6, 7, 8 };
View view1{ data1 };
View view2{ data1 };
@ -1005,18 +1007,21 @@ namespace
View view4{ data3 };
View view6;
View view7;
SView view8{ data4 };
CHECK_TRUE(etl::equal(view1, view2));
CHECK_TRUE(etl::equal(view1, view3));
CHECK_FALSE(etl::equal(view1, view4));
CHECK_TRUE(etl::equal(view6, view6));
CHECK_TRUE(etl::equal(view6, view7));
CHECK_FALSE(etl::equal(view1, view8));
CHECK_TRUE(view1 == view2);
CHECK_FALSE(view1 == view3);
CHECK_FALSE(view1 == view4);
CHECK_TRUE(view6 == view6);
CHECK_TRUE(view6 == view7);
CHECK_FALSE(view1 == view8);
}
//*************************************************************************