@@ -31,27 +31,17 @@ WINRT_EXPORT namespace winrt
3131 array_view (value, N)
3232 {}
3333
34- template <typename = std::enable_if_t <std::is_same_v<T, bool >>>
35- array_view (std::vector<bool >& value) noexcept
36- {
37- static_assert (false , " Cannot use std::vector<bool> as an array_view. Consider std::array or std::unique_ptr<bool[]>." );
38- }
39-
40- template <typename = std::enable_if_t <std::is_same_v<T, bool >>>
41- array_view (std::vector<bool > const & value) noexcept
42- {
43- static_assert (false , " Cannot use std::vector<bool> as an array_view. Consider std::array or std::unique_ptr<bool[]>." );
44- }
45-
4634 template <typename C>
4735 array_view (std::vector<C>& value) noexcept :
48- array_view (value.data(), static_cast <size_type>(value.size()))
49- {}
36+ array_view (data(value), static_cast <size_type>(value.size()))
37+ {
38+ }
5039
5140 template <typename C>
5241 array_view (std::vector<C> const & value) noexcept :
53- array_view (value.data(), static_cast <size_type>(value.size()))
54- {}
42+ array_view (data(value), static_cast <size_type>(value.size()))
43+ {
44+ }
5545
5646 template <typename C, size_t N>
5747 array_view (std::array<C, N>& value) noexcept :
@@ -208,6 +198,22 @@ WINRT_EXPORT namespace winrt
208198
209199 pointer m_data{ nullptr };
210200 size_type m_size{ 0 };
201+
202+ private:
203+
204+ template <typename C>
205+ auto data (std::vector<C> const & value) noexcept
206+ {
207+ static_assert (!std::is_same_v<C, bool >, " Cannot use std::vector<bool> as an array_view. Consider std::array or std::unique_ptr<bool[]>." );
208+ return value.data ();
209+ }
210+
211+ template <typename C>
212+ auto data (std::vector<C>& value) noexcept
213+ {
214+ static_assert (!std::is_same_v<C, bool >, " Cannot use std::vector<bool> as an array_view. Consider std::array or std::unique_ptr<bool[]>." );
215+ return value.data ();
216+ }
211217 };
212218
213219 template <typename T>
0 commit comments