xref: /llvm-project/lldb/test/API/lang/cpp/class-template-parameter-pack/main.cpp (revision b706f56133a77f9d7c55270ac24ff59e6fce3fa4)
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