xref: /llvm-project/clang/test/Parser/cxx2a-bitfield-init.cpp (revision 6b8e3c02ca44fb6c3738bb0c75859c11a03e30ed)
1*6b8e3c02SRichard Smith // RUN: %clang_cc1 -std=c++2a -verify %s
2*6b8e3c02SRichard Smith 
3*6b8e3c02SRichard Smith namespace std_example {
4*6b8e3c02SRichard Smith   int a;
5*6b8e3c02SRichard Smith   const int b = 0; // expected-note {{here}}
6*6b8e3c02SRichard Smith   struct S {
7*6b8e3c02SRichard Smith     int x1 : 8 = 42;
8*6b8e3c02SRichard Smith     int x2 : 8 { 42 };
9*6b8e3c02SRichard Smith     int y1 : true ? 8 : a = 42;
10*6b8e3c02SRichard Smith     int y3 : (true ? 8 : b) = 42;
11*6b8e3c02SRichard Smith     int z : 1 || new int { 1 };
12*6b8e3c02SRichard Smith   };
13*6b8e3c02SRichard Smith   static_assert(S{}.x1 == 42);
14*6b8e3c02SRichard Smith   static_assert(S{}.x2 == 42);
15*6b8e3c02SRichard Smith   static_assert(S{}.y1 == 0);
16*6b8e3c02SRichard Smith   static_assert(S{}.y3 == 42);
17*6b8e3c02SRichard Smith   static_assert(S{}.z == 0);
18*6b8e3c02SRichard Smith 
19*6b8e3c02SRichard Smith   struct T {
20*6b8e3c02SRichard Smith     int y2 : true ? 8 : b = 42; // expected-error {{cannot assign to variable 'b'}}
21*6b8e3c02SRichard Smith   };
22*6b8e3c02SRichard Smith }
23