#691 etl::span copy constructor doesn't compile when types are not the same

This commit is contained in:
John Wellbelove 2023-05-08 19:00:06 +01:00
parent f4b8fd73c6
commit 1c333bbe07
3 changed files with 63 additions and 3 deletions

View File

@ -222,7 +222,7 @@ namespace etl
//*************************************************************************
template <typename U, size_t N>
ETL_CONSTEXPR span(const etl::span<U, N>& other, typename etl::enable_if<(Extent == etl::dynamic_extent) || (N == etl::dynamic_extent) || (N == Extent), void>::type) ETL_NOEXCEPT
: pbegin(other.pbegin)
: pbegin(other.data())
{
}
@ -625,8 +625,8 @@ namespace etl
//*************************************************************************
template <typename U, size_t N>
ETL_CONSTEXPR span(const etl::span<U, N>& other) ETL_NOEXCEPT
: pbegin(other.pbegin)
, pend(other.pend)
: pbegin(other.data())
, pend(other.data() + other.size())
{
}

View File

@ -305,6 +305,36 @@ namespace
CHECK(isEqual);
}
//*************************************************************************
TEST(test_copy_constructor_from_same_span_type)
{
etl::array<char, 10> data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
const etl::span<char> view1(data.data(), data.data() + data.size());
etl::span<char> view2(view1);
CHECK_EQUAL(data.size(), view1.size());
CHECK_EQUAL(data.size(), view2.size());
bool isEqual = std::equal(view1.begin(), view1.end(), view2.begin());
CHECK(isEqual);
}
//*************************************************************************
TEST(test_copy_constructor_from_different_span_type)
{
etl::array<char, 10> data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
const etl::span<char> view1(data.data(), data.data() + data.size());
etl::span<const char> view2(view1);
CHECK_EQUAL(data.size(), view1.size());
CHECK_EQUAL(data.size(), view2.size());
bool isEqual = std::equal(view1.begin(), view1.end(), view2.begin());
CHECK(isEqual);
}
//*************************************************************************
TEST(test_assign_from_span)
{

View File

@ -305,6 +305,36 @@ namespace
CHECK(isEqual);
}
//*************************************************************************
TEST(test_copy_constructor_from_same_span_type)
{
etl::array<char, 10> data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
const etl::span<char, 10> view1(data.data(), data.data() + data.size());
etl::span<char, 10> view2(view1);
CHECK_EQUAL(data.size(), view1.size());
CHECK_EQUAL(data.size(), view2.size());
bool isEqual = std::equal(view1.begin(), view1.end(), view2.begin());
CHECK(isEqual);
}
//*************************************************************************
TEST(test_copy_constructor_from_different_span_type)
{
etl::array<char, 10> data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
const etl::span<char, 10> view1(data.data(), data.data() + data.size());
etl::span<const char, 10> view2(view1);
CHECK_EQUAL(data.size(), view1.size());
CHECK_EQUAL(data.size(), view2.size());
bool isEqual = std::equal(view1.begin(), view1.end(), view2.begin());
CHECK(isEqual);
}
//*************************************************************************
TEST(test_assign_from_span)
{