// RUN: %check_clang_tidy %s cppcoreguidelines-pro-type-union-access %t union U { bool union_member1; char union_member2; } u; struct S { int non_union_member; union { bool union_member; }; union { char union_member2; } u; } s; void f(char); void f2(U); void f3(U&); void f4(U*); void check() { u.union_member1 = true; // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: do not access members of unions; use (boost::)variant instead [cppcoreguidelines-pro-type-union-access] auto b = u.union_member2; // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: do not access members of unions; use (boost::)variant instead auto a = &s.union_member; // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: do not access members of unions; use (boost::)variant instead f(s.u.union_member2); // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: do not access members of unions; use (boost::)variant instead s.non_union_member = 2; // OK U u2 = u; // OK f2(u); // OK f3(u); // OK f4(&u); // OK }