view gcc/testsuite/g++.dg/template/partial-specialization6.C @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 04ced10e8804
children
line wrap: on
line source

// 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;
};