xref: /aosp_15_r20/external/clang/test/SemaCXX/dependent-noexcept-unevaluated.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -std=c++11 %s
2*67e74705SXin Li 
3*67e74705SXin Li template <class T>
4*67e74705SXin Li T&&
5*67e74705SXin Li declval() noexcept;
6*67e74705SXin Li 
7*67e74705SXin Li template <class T>
8*67e74705SXin Li struct some_trait
9*67e74705SXin Li {
10*67e74705SXin Li     static const bool value = false;
11*67e74705SXin Li };
12*67e74705SXin Li 
13*67e74705SXin Li template <class T>
swap(T & x,T & y)14*67e74705SXin Li void swap(T& x, T& y) noexcept(some_trait<T>::value)
15*67e74705SXin Li {
16*67e74705SXin Li     T tmp(static_cast<T&&>(x));
17*67e74705SXin Li     x = static_cast<T&&>(y);
18*67e74705SXin Li     y = static_cast<T&&>(tmp);
19*67e74705SXin Li }
20*67e74705SXin Li 
21*67e74705SXin Li template <class T, unsigned N>
22*67e74705SXin Li struct array
23*67e74705SXin Li {
24*67e74705SXin Li     T data[N];
25*67e74705SXin Li 
26*67e74705SXin Li   void swap(array& a) noexcept(noexcept(::swap(declval<T&>(), declval<T&>())));
27*67e74705SXin Li };
28*67e74705SXin Li 
29*67e74705SXin Li struct DefaultOnly
30*67e74705SXin Li {
31*67e74705SXin Li     DefaultOnly() = default;
32*67e74705SXin Li     DefaultOnly(const DefaultOnly&) = delete;
33*67e74705SXin Li     DefaultOnly& operator=(const DefaultOnly&) = delete;
34*67e74705SXin Li     ~DefaultOnly() = default;
35*67e74705SXin Li };
36*67e74705SXin Li 
main()37*67e74705SXin Li int main()
38*67e74705SXin Li {
39*67e74705SXin Li     array<DefaultOnly, 1> a, b;
40*67e74705SXin Li }
41*67e74705SXin Li 
42