199451b44SJordan Rupprecht template <class T, int... Args> struct C {
299451b44SJordan Rupprecht T member;
argsAre_16_32C364f04629SRaphael Isemann bool argsAre_16_32() { return false; }
499451b44SJordan Rupprecht };
599451b44SJordan Rupprecht
699451b44SJordan Rupprecht template <> struct C<int, 16> {
799451b44SJordan Rupprecht int member;
argsAre_16_32C864f04629SRaphael Isemann bool argsAre_16_32() { return false; }
999451b44SJordan Rupprecht };
1099451b44SJordan Rupprecht
1199451b44SJordan Rupprecht template <> struct C<int, 16, 32> : C<int, 16> {
argsAre_16_32C1264f04629SRaphael Isemann bool argsAre_16_32() { return true; }
1399451b44SJordan Rupprecht };
1499451b44SJordan Rupprecht
1599451b44SJordan Rupprecht template <class T, typename... Args> struct D {
1699451b44SJordan Rupprecht T member;
argsAre_Int_boolD1764f04629SRaphael Isemann bool argsAre_Int_bool() { return false; }
1899451b44SJordan Rupprecht };
1999451b44SJordan Rupprecht
2099451b44SJordan Rupprecht template <> struct D<int, int> {
2199451b44SJordan Rupprecht int member;
argsAre_Int_boolD2264f04629SRaphael Isemann bool argsAre_Int_bool() { return false; }
2399451b44SJordan Rupprecht };
2499451b44SJordan Rupprecht
2599451b44SJordan Rupprecht template <> struct D<int, int, bool> : D<int, int> {
argsAre_Int_boolD2664f04629SRaphael Isemann bool argsAre_Int_bool() { return true; }
2799451b44SJordan Rupprecht };
2899451b44SJordan Rupprecht
29*b706f561SJonas Devlieghere template <typename... Args> struct OnlyPack {};
30*b706f561SJonas Devlieghere template <typename T, typename... Args> struct EmptyPack {};
31*b706f561SJonas Devlieghere
main(int argc,char const * argv[])3264f04629SRaphael Isemann int main(int argc, char const *argv[]) {
33*b706f561SJonas Devlieghere EmptyPack<int> emptyPack;
34*b706f561SJonas Devlieghere OnlyPack<int, char, double, D<int, int, bool>> onlyPack;
35*b706f561SJonas Devlieghere
3699451b44SJordan Rupprecht C<int, 16, 32> myC;
3799451b44SJordan Rupprecht C<int, 16> myLesserC;
3899451b44SJordan Rupprecht myC.member = 64;
3964f04629SRaphael Isemann (void)C<int, 16, 32>().argsAre_16_32();
4064f04629SRaphael Isemann (void)C<int, 16>().argsAre_16_32();
4164f04629SRaphael Isemann (void)(myC.member != 64);
4299451b44SJordan Rupprecht D<int, int, bool> myD;
43*b706f561SJonas Devlieghere D<int, int> myLesserD; // breakpoint here
4499451b44SJordan Rupprecht myD.member = 64;
4564f04629SRaphael Isemann (void)D<int, int, bool>().argsAre_Int_bool();
4664f04629SRaphael Isemann (void)D<int, int>().argsAre_Int_bool();
4799451b44SJordan Rupprecht
4864f04629SRaphael Isemann return 0; // break here
4999451b44SJordan Rupprecht }
50