mirror of
https://github.com/microsoft/GSL.git
synced 2024-11-03 17:56:43 -05:00
Additional std::array ctor to support const element cases.
This commit is contained in:
parent
c94a66f468
commit
62f30205e5
@ -318,6 +318,11 @@ public:
|
||||
{}
|
||||
|
||||
template <size_t N>
|
||||
constexpr span(std::array<element_type, N>& arr)
|
||||
: storage_(&arr[0], extent_type<N>())
|
||||
{}
|
||||
|
||||
template <size_t N, class = std::enable_if_t<is_const<element_type>::value>>
|
||||
constexpr span(std::array<std::remove_const_t<element_type>, N>& arr)
|
||||
: storage_(&arr[0], extent_type<N>())
|
||||
{}
|
||||
|
@ -400,6 +400,7 @@ SUITE(span_tests)
|
||||
take_a_span(get_an_array());
|
||||
}
|
||||
#endif
|
||||
|
||||
{
|
||||
auto get_an_array = []() -> std::array<int, 4> { return { 1, 2, 3, 4 }; };
|
||||
auto take_a_span = [](span<const int> s) { static_cast<void>(s); };
|
||||
@ -445,6 +446,40 @@ SUITE(span_tests)
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST(from_std_array_const_constructor)
|
||||
{
|
||||
std::array<const int, 4> arr = {1, 2, 3, 4};
|
||||
|
||||
{
|
||||
span<const int> s{arr};
|
||||
CHECK(s.size() == narrow_cast<ptrdiff_t>(arr.size()) && s.data() == arr.data());
|
||||
}
|
||||
|
||||
{
|
||||
span<const int, 4> s{arr};
|
||||
CHECK(s.size() == narrow_cast<ptrdiff_t>(arr.size()) && s.data() == arr.data());
|
||||
}
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
{
|
||||
span<const int, 2> s{arr};
|
||||
CHECK(s.size() == 2 && s.data() == arr.data());
|
||||
}
|
||||
|
||||
{
|
||||
span<const int, 0> s{arr};
|
||||
CHECK(s.size() == 0 && s.data() == arr.data());
|
||||
}
|
||||
|
||||
{
|
||||
span<const int, 5> s{arr};
|
||||
}
|
||||
|
||||
{
|
||||
span<int, 4> s{arr};
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST(from_container_constructor)
|
||||
{
|
||||
std::vector<int> v = {1, 2, 3};
|
||||
|
Loading…
Reference in New Issue
Block a user