1*42ba740aSDamien L-G // 2*42ba740aSDamien L-G // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 3*42ba740aSDamien L-G // See https://llvm.org/LICENSE.txt for license information. 4*42ba740aSDamien L-G // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 5*42ba740aSDamien L-G // 6*42ba740aSDamien L-G //===----------------------------------------------------------------------===// 7*42ba740aSDamien L-G 8*42ba740aSDamien L-G // UNSUPPORTED: c++03, c++11, c++14, c++17 9*42ba740aSDamien L-G 10*42ba740aSDamien L-G // <atomic_ref> 11*42ba740aSDamien L-G 12*42ba740aSDamien L-G // template<class T> 13*42ba740aSDamien L-G // class atomic_ref; 14*42ba740aSDamien L-G 15*42ba740aSDamien L-G // The program is ill-formed if is_trivially_copyable_v<T> is false. 16*42ba740aSDamien L-G 17*42ba740aSDamien L-G #include <atomic> 18*42ba740aSDamien L-G trivially_copyable()19*42ba740aSDamien L-Gvoid trivially_copyable() { 20*42ba740aSDamien L-G struct X { 21*42ba740aSDamien L-G X() = default; 22*42ba740aSDamien L-G X(X const&) {} // -> not trivially copyable 23*42ba740aSDamien L-G } x; 24*42ba740aSDamien L-G // expected-error-re@*:* {{static assertion failed {{.*}}atomic_ref<T> requires that 'T' be a trivially copyable type}} 25*42ba740aSDamien L-G std::atomic_ref<X> r(x); 26*42ba740aSDamien L-G } 27