1*b82dcb62SLouis Dionne //===----------------------------------------------------------------------===// 2*b82dcb62SLouis Dionne // 3*b82dcb62SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*b82dcb62SLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5*b82dcb62SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*b82dcb62SLouis Dionne // 7*b82dcb62SLouis Dionne //===----------------------------------------------------------------------===// 8*b82dcb62SLouis Dionne 9*b82dcb62SLouis Dionne // UNSUPPORTED: c++03, c++11, c++14 10*b82dcb62SLouis Dionne 11*b82dcb62SLouis Dionne // <variant> 12*b82dcb62SLouis Dionne 13*b82dcb62SLouis Dionne // LWG issue 3024 14*b82dcb62SLouis Dionne 15*b82dcb62SLouis Dionne #include <variant> 16*b82dcb62SLouis Dionne #include <type_traits> 17*b82dcb62SLouis Dionne 18*b82dcb62SLouis Dionne struct NotCopyConstructible 19*b82dcb62SLouis Dionne { 20*b82dcb62SLouis Dionne NotCopyConstructible() = default; 21*b82dcb62SLouis Dionne NotCopyConstructible(NotCopyConstructible const&) = delete; 22*b82dcb62SLouis Dionne }; 23*b82dcb62SLouis Dionne main(int,char **)24*b82dcb62SLouis Dionneint main(int, char**) 25*b82dcb62SLouis Dionne { 26*b82dcb62SLouis Dionne static_assert(!std::is_copy_constructible_v<NotCopyConstructible>); 27*b82dcb62SLouis Dionne 28*b82dcb62SLouis Dionne std::variant<NotCopyConstructible> v; 29*b82dcb62SLouis Dionne std::variant<NotCopyConstructible> v1; 30*b82dcb62SLouis Dionne std::variant<NotCopyConstructible> v2(v); // expected-error {{call to implicitly-deleted copy constructor of 'std::variant<NotCopyConstructible>'}} 31*b82dcb62SLouis Dionne v1 = v; // expected-error-re {{object of type 'std:{{.*}}:variant<NotCopyConstructible>' cannot be assigned because its copy assignment operator is implicitly deleted}} 32*b82dcb62SLouis Dionne } 33