| // PR c++/53524 |
| // { dg-options "-Wno-enum-compare" } |
| |
| template < typename > struct PointerLikeTypeTraits { |
| enum { NumLowBitsAvailable }; |
| }; |
| |
| class CodeGenInstruction; |
| class CodeGenInstAlias; |
| |
| template < typename T> |
| struct PointerIntPair { |
| enum { IntShift = T::NumLowBitsAvailable }; |
| }; |
| |
| template < typename PT1, typename PT2 > struct PointerUnionUIntTraits { |
| enum { |
| PT1BitsAv = PointerLikeTypeTraits < PT1 >::NumLowBitsAvailable, |
| PT2BitsAv = PointerLikeTypeTraits < PT2 >::NumLowBitsAvailable, |
| NumLowBitsAvailable = 0 ? PT1BitsAv : PT2BitsAv |
| }; |
| }; |
| |
| template < typename PT1, typename PT2 > class PointerUnion { |
| typedef PointerIntPair < PointerUnionUIntTraits < PT1, PT2 > > ValTy; |
| ValTy Val; |
| }; |
| |
| struct ClassInfo { |
| PointerUnion < CodeGenInstruction *, CodeGenInstAlias * > DefRec; |
| }; |