// Written by David Hallas to trigger this bug in Valgrind:
// https://bugs.kde.org/show_bug.cgi?id=359133
#define CONCAT2(x, y) x##y
#define CONCAT(x, y) CONCAT2(x, y)
#define AllLetters ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ
#define TemplateName(name) CONCAT(AllLetters, name)
#define TemplateDef(name) class TemplateName(name) {};
TemplateDef(1)
TemplateDef(2)
TemplateDef(3)
TemplateDef(4)
TemplateDef(5)
TemplateDef(6)
TemplateDef(7)
TemplateDef(8)
TemplateDef(9)
TemplateDef(10)
TemplateDef(11)
TemplateDef(12)
TemplateDef(13)
TemplateDef(14)
TemplateDef(15)
TemplateDef(16)
TemplateDef(17)
TemplateDef(18)
TemplateDef(19)
TemplateDef(20)
TemplateDef(21)
TemplateDef(22)
TemplateDef(23)
TemplateDef(24)
TemplateDef(25)
TemplateDef(26)
TemplateDef(27)
TemplateDef(28)
TemplateDef(29)
TemplateDef(30)
TemplateDef(31)
TemplateDef(32)
TemplateDef(33)
TemplateDef(34)
TemplateDef(35)
TemplateDef(36)
TemplateDef(37)
TemplateDef(38)
TemplateDef(39)
TemplateDef(40)
TemplateDef(41)
TemplateDef(42)
TemplateDef(43)
TemplateDef(44)
TemplateDef(45)
TemplateDef(46)
TemplateDef(47)
TemplateDef(48)
TemplateDef(49)
TemplateDef(50)
class MyTemplate {
public:
template<typename... T>
void foo();
};
template<>
void MyTemplate::foo<
TemplateName(1),
TemplateName(2),
TemplateName(3),
TemplateName(4),
TemplateName(5),
TemplateName(6),
TemplateName(7),
TemplateName(8),
TemplateName(9),
TemplateName(10),
TemplateName(11),
TemplateName(12),
TemplateName(13),
TemplateName(14),
TemplateName(15),
TemplateName(16),
TemplateName(17),
TemplateName(18),
TemplateName(19),
TemplateName(20),
TemplateName(21),
TemplateName(22),
TemplateName(23),
TemplateName(24),
TemplateName(25),
TemplateName(26),
TemplateName(27),
TemplateName(28),
TemplateName(29),
TemplateName(30),
TemplateName(31),
TemplateName(32),
TemplateName(33),
TemplateName(34),
TemplateName(35),
TemplateName(36),
TemplateName(37),
TemplateName(38),
TemplateName(39),
TemplateName(40),
TemplateName(41),
TemplateName(42),
TemplateName(43),
TemplateName(44),
TemplateName(45),
TemplateName(46),
TemplateName(47),
TemplateName(48),
TemplateName(49),
TemplateName(50)
>();
template<>
void MyTemplate::foo<
TemplateName(1),
TemplateName(2),
TemplateName(3),
TemplateName(4),
TemplateName(5),
TemplateName(6),
TemplateName(7),
TemplateName(8),
TemplateName(9),
TemplateName(10),
TemplateName(11),
TemplateName(12),
TemplateName(13),
TemplateName(14),
TemplateName(15),
TemplateName(16),
TemplateName(17),
TemplateName(18),
TemplateName(19),
TemplateName(20),
TemplateName(21),
TemplateName(22),
TemplateName(23),
TemplateName(24),
TemplateName(25),
TemplateName(26),
TemplateName(27),
TemplateName(28),
TemplateName(29),
TemplateName(30),
TemplateName(31),
TemplateName(32),
TemplateName(33),
TemplateName(34),
TemplateName(35),
TemplateName(36),
TemplateName(37),
TemplateName(38),
TemplateName(39),
TemplateName(40),
TemplateName(41),
TemplateName(42),
TemplateName(43),
TemplateName(44),
TemplateName(45),
TemplateName(46),
TemplateName(47),
TemplateName(48),
TemplateName(49),
TemplateName(50)
>()
{
}
int main(int argc, char* argv[])
{
MyTemplate instance;
instance.foo<
TemplateName(1),
TemplateName(2),
TemplateName(3),
TemplateName(4),
TemplateName(5),
TemplateName(6),
TemplateName(7),
TemplateName(8),
TemplateName(9),
TemplateName(10),
TemplateName(11),
TemplateName(12),
TemplateName(13),
TemplateName(14),
TemplateName(15),
TemplateName(16),
TemplateName(17),
TemplateName(18),
TemplateName(19),
TemplateName(20),
TemplateName(21),
TemplateName(22),
TemplateName(23),
TemplateName(24),
TemplateName(25),
TemplateName(26),
TemplateName(27),
TemplateName(28),
TemplateName(29),
TemplateName(30),
TemplateName(31),
TemplateName(32),
TemplateName(33),
TemplateName(34),
TemplateName(35),
TemplateName(36),
TemplateName(37),
TemplateName(38),
TemplateName(39),
TemplateName(40),
TemplateName(41),
TemplateName(42),
TemplateName(43),
TemplateName(44),
TemplateName(45),
TemplateName(46),
TemplateName(47),
TemplateName(48),
TemplateName(49),
TemplateName(50)
>();
return 0;
}