aboutsummaryrefslogtreecommitdiff
path: root/test/std/containers/views/span.cons/deduct.pass.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2018-07-28 11:07:56 +0000
committerDimitry Andric <dim@FreeBSD.org>2018-07-28 11:07:56 +0000
commitf36202620b428c45a1c8d91743727c9313424fb2 (patch)
tree14928d8970ba4890a6370aca4c38fc832d45f21f /test/std/containers/views/span.cons/deduct.pass.cpp
parent0294ba5648d889e48ffee8ddad25944e258940ae (diff)
Notes
Diffstat (limited to 'test/std/containers/views/span.cons/deduct.pass.cpp')
-rw-r--r--test/std/containers/views/span.cons/deduct.pass.cpp87
1 files changed, 87 insertions, 0 deletions
diff --git a/test/std/containers/views/span.cons/deduct.pass.cpp b/test/std/containers/views/span.cons/deduct.pass.cpp
new file mode 100644
index 000000000000..e72c09149f03
--- /dev/null
+++ b/test/std/containers/views/span.cons/deduct.pass.cpp
@@ -0,0 +1,87 @@
+// -*- C++ -*-
+//===------------------------------ span ---------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===---------------------------------------------------------------------===//
+// UNSUPPORTED: c++98, c++03, c++11, c++14, c++17
+
+// <span>
+
+// template<class T, size_t N>
+// span(T (&)[N]) -> span<T, N>;
+//
+// template<class T, size_t N>
+// span(array<T, N>&) -> span<T, N>;
+//
+// template<class T, size_t N>
+// span(const array<T, N>&) -> span<const T, N>;
+//
+// template<class Container>
+// span(Container&) -> span<typename Container::value_type>;
+//
+// template<class Container>
+// span(const Container&) -> span<const typename Container::value_type>;
+
+
+
+#include <span>
+#include <algorithm>
+#include <array>
+#include <cassert>
+#include <string>
+#include <type_traits>
+
+#include "test_macros.h"
+
+// std::array is explicitly allowed to be initialized with A a = { init-list };.
+// Disable the missing braces warning for this reason.
+#include "disable_missing_braces_warning.h"
+
+int main ()
+{
+ {
+ int arr[] = {1,2,3};
+ std::span s{arr};
+ using S = decltype(s);
+ ASSERT_SAME_TYPE(S, std::span<int, 3>);
+ assert((std::equal(std::begin(arr), std::end(arr), s.begin(), s.end())));
+ }
+
+ {
+ std::array<double, 4> arr = {1.0, 2.0, 3.0, 4.0};
+ std::span s{arr};
+ using S = decltype(s);
+ ASSERT_SAME_TYPE(S, std::span<double, 4>);
+ assert((std::equal(std::begin(arr), std::end(arr), s.begin(), s.end())));
+ }
+
+ {
+ const std::array<long, 5> arr = {4, 5, 6, 7, 8};
+ std::span s{arr};
+ using S = decltype(s);
+ ASSERT_SAME_TYPE(S, std::span<const long, 5>);
+ assert((std::equal(std::begin(arr), std::end(arr), s.begin(), s.end())));
+ }
+
+ {
+ std::string str{"ABCDE"};
+ std::span s{str};
+ using S = decltype(s);
+ ASSERT_SAME_TYPE(S, std::span<char>);
+ assert((size_t)s.size() == str.size());
+ assert((std::equal(s.begin(), s.end(), std::begin(s), std::end(s))));
+ }
+
+ {
+ const std::string str{"QWERTYUIOP"};
+ std::span s{str};
+ using S = decltype(s);
+ ASSERT_SAME_TYPE(S, std::span<const char>);
+ assert((size_t)s.size() == str.size());
+ assert((std::equal(s.begin(), s.end(), std::begin(s), std::end(s))));
+ }
+}