xref: /aosp_15_r20/external/clang/test/SemaTemplate/enum-argument.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li // expected-no-diagnostics
3*67e74705SXin Li 
4*67e74705SXin Li enum Enum { val = 1 };
5*67e74705SXin Li template <Enum v> struct C {
6*67e74705SXin Li   typedef C<v> Self;
7*67e74705SXin Li };
8*67e74705SXin Li template struct C<val>;
9*67e74705SXin Li 
10*67e74705SXin Li template<typename T>
11*67e74705SXin Li struct get_size {
12*67e74705SXin Li   static const unsigned value = sizeof(T);
13*67e74705SXin Li };
14*67e74705SXin Li 
15*67e74705SXin Li template<typename T>
16*67e74705SXin Li struct X0 {
17*67e74705SXin Li   enum {
18*67e74705SXin Li     Val1 = get_size<T>::value,
19*67e74705SXin Li     Val2,
20*67e74705SXin Li     SumOfValues = Val1 + Val2
21*67e74705SXin Li   };
22*67e74705SXin Li };
23*67e74705SXin Li 
24*67e74705SXin Li X0<int> x0i;
25*67e74705SXin Li 
26*67e74705SXin Li namespace rdar8020920 {
27*67e74705SXin Li   template<typename T>
28*67e74705SXin Li   struct X {
29*67e74705SXin Li     enum { e0 = 32 };
30*67e74705SXin Li 
31*67e74705SXin Li     unsigned long long bitfield : e0;
32*67e74705SXin Li 
frdar8020920::X33*67e74705SXin Li     void f(int j) {
34*67e74705SXin Li       bitfield + j;
35*67e74705SXin Li     }
36*67e74705SXin Li   };
37*67e74705SXin Li }
38