Disable span TContainer constructor for arrays

This commit is contained in:
John Wellbelove 2021-12-14 15:56:40 +00:00
parent 6827a73ff8
commit cb7ee61b33

View File

@ -45,6 +45,15 @@ SOFTWARE.
#if ETL_CPP11_SUPPORTED && ETL_USING_STL #if ETL_CPP11_SUPPORTED && ETL_USING_STL
#include <array> #include <array>
#include <iterator>
#define ETL_BEGIN(x) std::begin(x)
#define ETL_END(x) std::end(x)
#else
#include "iterator.h"
#define ETL_BEGIN(x) etl::begin(x)
#define ETL_END(x) etl::end(x)
#endif #endif
namespace etl namespace etl
@ -104,37 +113,14 @@ namespace etl
} }
#endif #endif
#if ETL_CPP11_SUPPORTED
//*************************************************************************
/// Construct from a container or other type that supports
/// data() and size() member functions.
//*************************************************************************
template <typename TContainer, typename = typename etl::enable_if<!etl::is_array<TContainer>::value, int>::type>
ETL_CONSTEXPR span(TContainer& a) ETL_NOEXCEPT
: mbegin(a.data())
, mend(a.data() + a.size())
{
}
//*************************************************************************
/// Construct from a container or other type that supports
/// data() and size() member functions.
//*************************************************************************
template <typename TContainer, typename = typename etl::enable_if<!etl::is_array<TContainer>::value, int>::type>
ETL_CONSTEXPR span(const TContainer& a) ETL_NOEXCEPT
: mbegin(a.data())
, mend(a.data() + a.size())
{
}
#else
//************************************************************************* //*************************************************************************
/// Construct from a container or other type that supports /// Construct from a container or other type that supports
/// data() and size() member functions. /// data() and size() member functions.
//************************************************************************* //*************************************************************************
template <typename TContainer> template <typename TContainer>
ETL_CONSTEXPR span(TContainer& a) ETL_NOEXCEPT ETL_CONSTEXPR span(TContainer& a) ETL_NOEXCEPT
: mbegin(a.data()) : mbegin(etl::addressof(*ETL_BEGIN(a)))
, mend(a.data() + a.size()) , mend(etl::addressof(*ETL_END(a)))
{ {
} }
@ -144,11 +130,10 @@ namespace etl
//************************************************************************* //*************************************************************************
template <typename TContainer> template <typename TContainer>
ETL_CONSTEXPR span(const TContainer& a) ETL_NOEXCEPT ETL_CONSTEXPR span(const TContainer& a) ETL_NOEXCEPT
: mbegin(a.data()) : mbegin(etl::addressof(*ETL_BEGIN(a)))
, mend(a.data() + a.size()) , mend(etl::addressof(*ETL_END(a)))
{ {
} }
#endif
//************************************************************************* //*************************************************************************
/// Construct from iterators /// Construct from iterators