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