xref: /llvm-project/libcxx/test/std/containers/views/views.span/span.cons/iterator_sentinel.verify.cpp (revision e99c4906e44ae3f921fa05356909d006cda8d954)
1a8cf78c7SLouis Dionne //===---------------------------------------------------------------------===//
2a8cf78c7SLouis Dionne //
3a8cf78c7SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4a8cf78c7SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5a8cf78c7SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6a8cf78c7SLouis Dionne //
7a8cf78c7SLouis Dionne //===---------------------------------------------------------------------===//
8a8cf78c7SLouis Dionne // UNSUPPORTED: c++03, c++11, c++14, c++17
9a8cf78c7SLouis Dionne 
10a8cf78c7SLouis Dionne // <span>
11a8cf78c7SLouis Dionne 
12a8cf78c7SLouis Dionne // template <class It, class End>
13a8cf78c7SLouis Dionne // constexpr explicit(Extent != dynamic_extent) span(It first, End last);
14a8cf78c7SLouis Dionne // Requires: [first, last) shall be a valid range.
15a8cf78c7SLouis Dionne //   If Extent is not equal to dynamic_extent, then last - first shall be equal to Extent.
16a8cf78c7SLouis Dionne //
17a8cf78c7SLouis Dionne 
18*e99c4906SNikolas Klauser #include <cstddef>
19a8cf78c7SLouis Dionne #include <iterator>
20*e99c4906SNikolas Klauser #include <span>
21a8cf78c7SLouis Dionne 
22fb855eb9SMark de Wever template<class T, std::size_t Extent>
23a8cf78c7SLouis Dionne std::span<T, Extent> createImplicitSpan(T* first, T* last) {
24a8cf78c7SLouis Dionne     return {first, last}; // expected-error {{chosen constructor is explicit in copy-initialization}}
25a8cf78c7SLouis Dionne }
26a8cf78c7SLouis Dionne 
2772f0edf3SLouis Dionne void f() {
28a8cf78c7SLouis Dionne   // explicit constructor necessary
29a8cf78c7SLouis Dionne   int arr[] = {1, 2, 3};
30a8cf78c7SLouis Dionne   createImplicitSpan<int, 1>(std::begin(arr), std::end(arr));
31a8cf78c7SLouis Dionne }
32