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