ArrayView, adding ctor for fixed-size views of const(expr) std::array.

This CL allows to reduce the code required to create fixed-size ArrayView
objects for const(expr) std::array instances. Instead of passing .data() and
size(), it is now sufficient to pass the const(expr) std::array instance.
When instancing an array view with variable size, a different ctor is called.

Bug: webrtc:9076
Change-Id: Ie1182fdc33c6b5657f510b6723552813d5933e3e
Reviewed-on: https://webrtc-review.googlesource.com/76820
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23243}
diff --git a/api/array_view_unittest.cc b/api/array_view_unittest.cc
index 0cea889..694ed0b 100644
--- a/api/array_view_unittest.cc
+++ b/api/array_view_unittest.cc
@@ -194,6 +194,25 @@
   EXPECT_EQ(size, arr_view.size());
 }
 
+TEST(ArrayViewTest, TestConstStdArray) {
+  constexpr size_t size = 5;
+
+  constexpr std::array<float, size> constexpr_arr{};
+  rtc::ArrayView<const float, size> constexpr_arr_view(constexpr_arr);
+  EXPECT_EQ(constexpr_arr.data(), constexpr_arr_view.data());
+  static_assert(constexpr_arr.size() == constexpr_arr_view.size(), "");
+
+  const std::array<float, size> const_arr{};
+  rtc::ArrayView<const float, size> const_arr_view(const_arr);
+  EXPECT_EQ(const_arr.data(), const_arr_view.data());
+  static_assert(const_arr.size() == const_arr_view.size(), "");
+
+  std::array<float, size> non_const_arr{};
+  rtc::ArrayView<const float, size> non_const_arr_view(non_const_arr);
+  EXPECT_EQ(non_const_arr.data(), non_const_arr_view.data());
+  static_assert(non_const_arr.size() == non_const_arr_view.size(), "");
+}
+
 TEST(ArrayViewTest, TestStdVector) {
   std::vector<int> v;
   v.push_back(3);