// Contributed by Dodji Seketeli // Origin PR debug/30161 // { dg-options "-std=c++0x -g -dA" } // // In theory the compiler instantiates count, // count and count. In practice, only // count is emitted, thanks to constant folding. // So in theory, each of the 3 instances of count yields a // DW_TAG_GNU_template_parameter_pack DIE, but in practise, there is only one // DW_TAG_GNU_template_parameter_pack as there is only count // is emitted. // { dg-final { scan-assembler-times "DIE \\(0x\[^\n\]*\\) DW_TAG_GNU_template_parameter_pack" 1} } // { dg-final { scan-assembler-times "DIE \\(0x\[^\n\]*\\) DW_TAG_template_type_param" 3} } template struct count; template <> struct count<> { static const int value = 0; }; template struct count { static const int value = 1 + count::value; }; template int do_count() { return count::value; } int c = do_count();