234 lines
5.6 KiB
C++
234 lines
5.6 KiB
C++
// 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;
|
|
}
|