199451b44SJordan Rupprecht template <class T, int... Args> struct C {
299451b44SJordan Rupprecht   T member;
3*64f04629SRaphael Isemann   bool argsAre_16_32() { return false; }
499451b44SJordan Rupprecht };
599451b44SJordan Rupprecht 
699451b44SJordan Rupprecht template <> struct C<int, 16> {
799451b44SJordan Rupprecht   int member;
8*64f04629SRaphael Isemann   bool argsAre_16_32() { return false; }
999451b44SJordan Rupprecht };
1099451b44SJordan Rupprecht 
1199451b44SJordan Rupprecht template <> struct C<int, 16, 32> : C<int, 16> {
12*64f04629SRaphael Isemann   bool argsAre_16_32() { return true; }
1399451b44SJordan Rupprecht };
1499451b44SJordan Rupprecht 
1599451b44SJordan Rupprecht template <class T, typename... Args> struct D {
1699451b44SJordan Rupprecht   T member;
17*64f04629SRaphael Isemann   bool argsAre_Int_bool() { return false; }
1899451b44SJordan Rupprecht };
1999451b44SJordan Rupprecht 
2099451b44SJordan Rupprecht template <> struct D<int, int> {
2199451b44SJordan Rupprecht   int member;
22*64f04629SRaphael Isemann   bool argsAre_Int_bool() { return false; }
2399451b44SJordan Rupprecht };
2499451b44SJordan Rupprecht 
2599451b44SJordan Rupprecht template <> struct D<int, int, bool> : D<int, int> {
26*64f04629SRaphael Isemann   bool argsAre_Int_bool() { return true; }
2799451b44SJordan Rupprecht };
2899451b44SJordan Rupprecht 
29*64f04629SRaphael Isemann int main(int argc, char const *argv[]) {
3099451b44SJordan Rupprecht   C<int, 16, 32> myC;
3199451b44SJordan Rupprecht   C<int, 16> myLesserC;
3299451b44SJordan Rupprecht   myC.member = 64;
33*64f04629SRaphael Isemann   (void)C<int, 16, 32>().argsAre_16_32();
34*64f04629SRaphael Isemann   (void)C<int, 16>().argsAre_16_32();
35*64f04629SRaphael Isemann   (void)(myC.member != 64);
3699451b44SJordan Rupprecht   D<int, int, bool> myD;
3799451b44SJordan Rupprecht   D<int, int> myLesserD;
3899451b44SJordan Rupprecht   myD.member = 64;
39*64f04629SRaphael Isemann   (void)D<int, int, bool>().argsAre_Int_bool();
40*64f04629SRaphael Isemann   (void)D<int, int>().argsAre_Int_bool();
4199451b44SJordan Rupprecht 
42*64f04629SRaphael Isemann   return 0; // break here
4399451b44SJordan Rupprecht }
44