// PR c++/80174
typedef unsigned char uint8_t; 
template <typename T>
struct HighestMaxFieldIdx {
  static const uint8_t maxFieldIdx = T::fieldIdx;
};
template <typename This>
struct Outer {
  template <uint8_t _fieldIdx, typename T, T This::*field>
  struct Varint {};
  template <uint8_t _fieldIdx, uint8_t This::*field>
  struct Varint<_fieldIdx, uint8_t, field> {
    static const uint8_t fieldIdx = _fieldIdx;
  };
};
struct Msg {
  uint8_t a;
  static const uint8_t t
  = HighestMaxFieldIdx<Outer<Msg>::Varint<1, uint8_t, &Msg::a> >::maxFieldIdx;
};