1e93e58c6SMarek Kurdej //===----------------------------------------------------------------------===// 2e93e58c6SMarek Kurdej // 3e93e58c6SMarek Kurdej // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e93e58c6SMarek Kurdej // See https://llvm.org/LICENSE.txt for license information. 5e93e58c6SMarek Kurdej // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e93e58c6SMarek Kurdej // 7e93e58c6SMarek Kurdej //===----------------------------------------------------------------------===// 8e93e58c6SMarek Kurdej 9e93e58c6SMarek Kurdej // <array> 1031cbe0f2SLouis Dionne // UNSUPPORTED: c++03, c++11, c++14, c++17 11e93e58c6SMarek Kurdej 12e93e58c6SMarek Kurdej #include <array> 13e93e58c6SMarek Kurdej 14e93e58c6SMarek Kurdej #include "test_macros.h" 15e93e58c6SMarek Kurdej #include "MoveOnly.h" 16e93e58c6SMarek Kurdej 17fccc4af6SLouis Dionne // expected-warning@array:* 0-1 {{suggest braces around initialization of subobject}} 18fccc4af6SLouis Dionne main(int,char **)19e93e58c6SMarek Kurdejint main(int, char**) { 20e93e58c6SMarek Kurdej { 21e93e58c6SMarek Kurdej char source[3][6] = {"hi", "world"}; 22e93e58c6SMarek Kurdej // expected-error@array:* {{to_array does not accept multidimensional arrays}} 23e93e58c6SMarek Kurdej // expected-error@array:* {{to_array requires copy constructible elements}} 24e93e58c6SMarek Kurdej // expected-error@array:* 3 {{cannot initialize}} 25e93e58c6SMarek Kurdej std::to_array(source); // expected-note {{requested here}} 26e93e58c6SMarek Kurdej } 27e93e58c6SMarek Kurdej 28e93e58c6SMarek Kurdej { 29e93e58c6SMarek Kurdej MoveOnly mo[] = {MoveOnly{3}}; 30e93e58c6SMarek Kurdej // expected-error@array:* {{to_array requires copy constructible elements}} 31*06cf0ce9SNikolas Klauser // expected-error-re@array:* {{{{(call to implicitly-deleted copy constructor of 'MoveOnly')|(call to deleted constructor of 'MoveOnly')}}}} 32e93e58c6SMarek Kurdej std::to_array(mo); // expected-note {{requested here}} 33e93e58c6SMarek Kurdej } 34e93e58c6SMarek Kurdej 35e93e58c6SMarek Kurdej { 36e93e58c6SMarek Kurdej const MoveOnly cmo[] = {MoveOnly{3}}; 37e93e58c6SMarek Kurdej // expected-error@array:* {{to_array requires move constructible elements}} 38*06cf0ce9SNikolas Klauser // expected-error-re@array:* {{{{(call to implicitly-deleted copy constructor of 'MoveOnly')|(call to deleted constructor of 'MoveOnly')}}}} 39e93e58c6SMarek Kurdej std::to_array(std::move(cmo)); // expected-note {{requested here}} 40e93e58c6SMarek Kurdej } 41e93e58c6SMarek Kurdej 42e93e58c6SMarek Kurdej return 0; 43e93e58c6SMarek Kurdej } 44