https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79607
Bug ID: 79607 Summary: [5/6/7 Regression] ICE with brace-initialization of static const member Product: gcc Version: 7.0 Status: UNCONFIRMED Keywords: ice-on-valid-code, rejects-valid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: reichelt at gcc dot gnu.org Target Milestone: --- The following valid code snippet triggers an ICE since GCC 5.1.0: ===================================== template<typename T> struct A { static const int i = int{T{}}; }; A<int> a; ===================================== bug.cc:3:31: internal compiler error: in verify_ctor_sanity, at cp/constexpr.c:2633 static const int i = int{T{}}; ^ 0x834b57 verify_ctor_sanity ../../gcc/gcc/cp/constexpr.c:2633 0x83a4ff cxx_eval_bare_aggregate ../../gcc/gcc/cp/constexpr.c:2669 0x83a4ff cxx_eval_constant_expression ../../gcc/gcc/cp/constexpr.c:4314 0x83fb1e cxx_eval_outermost_constant_expr ../../gcc/gcc/cp/constexpr.c:4613 0x6b4062 store_init_value(tree_node*, tree_node*, vec<tree_node*, va_gc, vl_embed>**, int) ../../gcc/gcc/cp/typeck2.c:817 0x61034b check_initializer ../../gcc/gcc/cp/decl.c:6362 0x63cac6 cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int) ../../gcc/gcc/cp/decl.c:6930 0x6ec6fe grokfield(cp_declarator const*, cp_decl_specifier_seq*, tree_node*, bool, tree_node*, tree_node*) ../../gcc/gcc/cp/decl2.c:961 0x719b03 cp_parser_member_declaration ../../gcc/gcc/cp/parser.c:23404 0x71a6ba cp_parser_member_specification_opt ../../gcc/gcc/cp/parser.c:22953 0x71a6ba cp_parser_class_specifier_1 ../../gcc/gcc/cp/parser.c:22109 0x71cc19 cp_parser_class_specifier ../../gcc/gcc/cp/parser.c:22361 0x71cc19 cp_parser_type_specifier ../../gcc/gcc/cp/parser.c:16434 0x71db0a cp_parser_decl_specifier_seq ../../gcc/gcc/cp/parser.c:13347 0x719305 cp_parser_single_declaration ../../gcc/gcc/cp/parser.c:26628 0x73b25c cp_parser_template_declaration_after_parameters ../../gcc/gcc/cp/parser.c:26322 0x73aeec cp_parser_explicit_template_declaration ../../gcc/gcc/cp/parser.c:26557 0x73aeec cp_parser_template_declaration_after_export ../../gcc/gcc/cp/parser.c:26576 0x743009 cp_parser_declaration ../../gcc/gcc/cp/parser.c:12466 0x744b1b cp_parser_declaration_seq_opt ../../gcc/gcc/cp/parser.c:12393 Please submit a full bug report, [etc.] A similar code snippet is wrongly rejected: ===================================== template<typename T> struct A { static const int i = T{}; }; A<int> a; ===================================== bug.cc:3:26: error: cannot convert 'T' to 'const int' in initialization static const int i = T{}; ^ Both code snippets compile, if I replace 'T{}' by 'T()'.