#include #include #include #include #include namespace { template class ctor_from_container_test_span_ { T* data_; std::size_t sz_; public: template >> constexpr explicit ctor_from_container_test_span_( std::conditional_t, const V, V>& vec) noexcept : data_(vec.data()), sz_(vec.size()) {} [[nodiscard]] constexpr auto data() const noexcept { return data_; } [[nodiscard]] constexpr auto size() const noexcept { return sz_; } }; TEST(ArrayRefTest, ctor_from_container_test) { using value_type = int; std::vector test_vec{1, 6, 32, 4, 68, 3, 7}; const ctor_from_container_test_span_ test_mspan{test_vec}; const ctor_from_container_test_span_ test_cspan{ std::as_const(test_vec)}; const auto test_ref_mspan = c10::ArrayRef(test_mspan); const auto test_ref_cspan = c10::ArrayRef(test_cspan); EXPECT_EQ(std::as_const(test_vec), test_ref_mspan); EXPECT_EQ(std::as_const(test_vec), test_ref_cspan); } } // namespace