1 // PR c++/80174
2 
3 typedef unsigned char uint8_t;
4 
5 template <typename T>
6 struct HighestMaxFieldIdx {
7   static const uint8_t maxFieldIdx = T::fieldIdx;
8 };
9 
10 template <typename This>
11 struct Outer {
12 
13   template <uint8_t _fieldIdx, typename T, T This::*field>
14   struct Varint {};
15 
16 
17   template <uint8_t _fieldIdx, uint8_t This::*field>
18   struct Varint<_fieldIdx, uint8_t, field> {
19     static const uint8_t fieldIdx = _fieldIdx;
20   };
21 };
22 
23 struct Msg {
24   uint8_t a;
25 
26   static const uint8_t t
27   = HighestMaxFieldIdx<Outer<Msg>::Varint<1, uint8_t, &Msg::a> >::maxFieldIdx;
28 };
29