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 Kurdej int 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