mirror of
https://github.com/microsoft/GSL.git
synced 2024-11-03 17:56:43 -05:00
discussed the issue with Casey Carter, the span ctor changes are accurate but the tests are not. The test require work that was done in C++17 regarding qualifier conversions to work correctly. Scoping tests for 17.
This commit is contained in:
parent
1dd1320c8b
commit
9b3ac8d681
@ -441,23 +441,6 @@ public:
|
|||||||
: storage_(KnownNotNull{arr + 0}, details::extent_type<N>())
|
: storage_(KnownNotNull{arr + 0}, details::extent_type<N>())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
// #define useold
|
|
||||||
#if defined(useold)
|
|
||||||
template <std::size_t N,
|
|
||||||
std::enable_if_t<details::is_allowed_extent_conversion<N, Extent>::value, int> = 0>
|
|
||||||
constexpr span(std::array<element_type, N>& arr) noexcept
|
|
||||||
: storage_(KnownNotNull{arr.data()}, details::extent_type<N>())
|
|
||||||
{}
|
|
||||||
|
|
||||||
template <std::size_t N,
|
|
||||||
std::enable_if_t<(details::is_allowed_extent_conversion<N, Extent>::value &&
|
|
||||||
details::is_allowed_element_type_conversion<const value_type,
|
|
||||||
element_type>::value),
|
|
||||||
int> = 0>
|
|
||||||
constexpr span(const std::array<value_type, N>& arr) noexcept
|
|
||||||
: storage_(KnownNotNull{arr.data()}, details::extent_type<N>())
|
|
||||||
{}
|
|
||||||
#else
|
|
||||||
template <class T, std::size_t N,
|
template <class T, std::size_t N,
|
||||||
std::enable_if_t<(details::is_allowed_extent_conversion<N, Extent>::value &&
|
std::enable_if_t<(details::is_allowed_extent_conversion<N, Extent>::value &&
|
||||||
details::is_allowed_element_type_conversion<T, element_type>::value), int> = 0>
|
details::is_allowed_element_type_conversion<T, element_type>::value), int> = 0>
|
||||||
@ -473,7 +456,7 @@ public:
|
|||||||
constexpr span(const std::array<T, N>& arr) noexcept
|
constexpr span(const std::array<T, N>& arr) noexcept
|
||||||
: storage_(KnownNotNull{arr.data()}, details::extent_type<N>())
|
: storage_(KnownNotNull{arr.data()}, details::extent_type<N>())
|
||||||
{}
|
{}
|
||||||
#endif
|
|
||||||
// NB: the SFINAE here uses .data() as an incomplete/imperfect proxy for the requirement
|
// NB: the SFINAE here uses .data() as an incomplete/imperfect proxy for the requirement
|
||||||
// on Container to be a contiguous sequence container.
|
// on Container to be a contiguous sequence container.
|
||||||
template <class Container,
|
template <class Container,
|
||||||
|
@ -48,20 +48,22 @@ TEST(span_compatibility_tests, assertion_tests)
|
|||||||
std::array<int, 3> stl{{100, 200, 300}};
|
std::array<int, 3> stl{{100, 200, 300}};
|
||||||
std::array<int*, 3> stl_nullptr{{nullptr,nullptr,nullptr}};
|
std::array<int*, 3> stl_nullptr{{nullptr,nullptr,nullptr}};
|
||||||
|
|
||||||
|
#if __cplusplus >= 201703l
|
||||||
|
// This std::is_convertible_v<int*(*)[], int const* const(*)[]> fails for C++14
|
||||||
|
// so these conversions aren't valid in C++14
|
||||||
{
|
{
|
||||||
gsl::span<const int* const> sp_const_nullptr_1{stl_nullptr};
|
gsl::span<const int* const> sp_const_nullptr_1{stl_nullptr};
|
||||||
EXPECT_TRUE(sp_const_nullptr_1.data() == stl_nullptr.data());
|
EXPECT_TRUE(sp_const_nullptr_1.data() == stl_nullptr.data());
|
||||||
EXPECT_TRUE(sp_const_nullptr_1.size() == 3);
|
EXPECT_TRUE(sp_const_nullptr_1.size() == 3);
|
||||||
|
|
||||||
#if __cplusplus >= 201703l
|
|
||||||
span<const int* const> sp_const_nullptr_2{std::as_const(stl_nullptr)};
|
span<const int* const> sp_const_nullptr_2{std::as_const(stl_nullptr)};
|
||||||
EXPECT_TRUE(sp_const_nullptr_2.data() == stl_nullptr.data());
|
EXPECT_TRUE(sp_const_nullptr_2.data() == stl_nullptr.data());
|
||||||
EXPECT_TRUE(sp_const_nullptr_2.size() == 3);
|
EXPECT_TRUE(sp_const_nullptr_2.size() == 3);
|
||||||
|
|
||||||
static_assert(std::is_same<decltype(span{stl_nullptr}), span<int*, 3>);
|
static_assert(std::is_same<decltype(span{stl_nullptr}), span<int*, 3>);
|
||||||
static_assert(std::is_same<decltype(span{std::as_const(stl_nullptr)}), span<int* const, 3>);
|
static_assert(std::is_same<decltype(span{std::as_const(stl_nullptr)}), span<int* const, 3>);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
{
|
{
|
||||||
gsl::span<int> sp_dyn;
|
gsl::span<int> sp_dyn;
|
||||||
|
Loading…
Reference in New Issue
Block a user