$ g++-7 -c test.ii
test.ii:18:21: error: parameter '<anonymous>' includes reference to array of unknown bound 'const long int []'
b(const long (&)[]); ^
test.ii:23: confused by earlier errors, bailing out
$ g++-9 -c test.ii
test.ii:23:16: error: call of overloaded 'b(<brace-enclosed initializer list>)' is ambiguous
23 | blaspp<1> k({4})
| ^
test.ii:18:3: note: candidate: 'b::b<l, f, 0, f, baseclass<g, h, true, i>, j ...>::b(const long int (&)[]) [with l = double; long unsigned int f = 1; baseclass = a; int g = 0; int h = 1; i = void; j = {}]'
18 | b(const long (&)[]);
| ^
test.ii:17:3: note: candidate: 'b::b<l, f, 0, f, baseclass<g, h, true, i>, j ...>::b(long int) [with l = double; long unsigned int f = 1; baseclass = a; int g = 0; int h = 1; i = void; j = {}]'
17 | b(long);
| ^
test.ii:16:7: note: candidate: 'constexpr b::b<double, 1, 0, 1, a<0, 1, true, void> >::b(const b::b<double, 1, 0, 1, a<0, 1, true, void> >&)'
16 | class b<l, f, 0, f, baseclass<g, h, true, i>, j...> {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
test.ii:16:7: note: candidate: 'constexpr b::b<double, 1, 0, 1, a<0, 1, true, void> >::b(b::b<double, 1, 0, 1, a<0, 1, true, void> >&&)'
test.ii:23:16: error: expected ',' or ';' at end of input
23 | blaspp<1> k({4})
| ^
$ cat test.ii
template <int, int, bool, class> class a;
namespace b {
template <typename, unsigned long, long, unsigned long, typename...> class b;
template <unsigned long, typename> struct c;
template <typename l, unsigned long d, unsigned long dim, typename... curshape>
struct c<d, b<l, dim, 0, dim, curshape...>> {
using e = typename c<d - 1, b<l, dim, 0, dim, a<0, 1, true, void>>>::e;
};
template <typename l, unsigned long dim, typename... curshape>
struct c<0, b<l, dim, 0, dim, curshape...>> {
using e = b<l, dim, 0, dim, curshape...>;
};
template <typename l, unsigned long f,
template <int, int, bool, typename> class baseclass, int g, int h,
typename i, typename... j>
class b<l, f, 0, f, baseclass<g, h, true, i>, j...> {
b(long);
b(const long (&)[]);
};
} // namespace b
template <long dim, typename l = double>
using blaspp = typename b::c<dim, b::b<l, dim, 0, dim>>::e;
blaspp<1> k({4})
$ g++ -c test.ii
../../ src/gcc/ toplev. c:325
../../ src/gcc/ cp/call. c:9684
../../ src/gcc/ cp/call. c:10124
../../ src/gcc/ cp/call. c:10526 method_ call_1
../../ src/gcc/ cp/call. c:9295 method_ call(tree_ node*, tree_node*, vec<tree_node*, va_gc, vl_embed>**, tree_node*, int, tree_node**, int)
../../ src/gcc/ cp/call. c:9462 member_ call(tree_ node*, tree_node*, vec<tree_node*, va_gc, vl_embed>**, tree_node*, int, int)
../../ src/gcc/ cp/call. c:8989
../../ src/gcc/ cp/init. c:1906
../../ src/gcc/ cp/init. c:2021 init(tree_ node*, tree_node*, int, int)
../../ src/gcc/ cp/init. c:1761 init_full_ exprs
../../ src/gcc/ cp/decl. c:6292
../../ src/gcc/ cp/decl. c:6441 decl(tree_ node*, tree_node*, bool, tree_node*, int)
../../ src/gcc/ cp/decl. c:7154 init_declarator
../../ src/gcc/ cp/parser. c:19819 simple_ declaration
../../ src/gcc/ cp/parser. c:13058 block_declarati on
../../ src/gcc/ cp/parser. c:12877 declaration
../../ src/gcc/ cp/parser. c:12775 declaration_ seq_opt
../../ src/gcc/ cp/parser. c:12651 translation_ unit
../../ src/gcc/ cp/parser. c:4563
../../ src/gcc/ cp/parser. c:39118
test.ii:23:16: internal compiler error: Segmentation fault
blaspp<1> k({4})
^
0x8a0698 crash_signal
0x5aa51e compare_ics
0xe8cbe1 joust
0xe8a7f6 tourney
0xe8a7f6 build_new_
0xe8a7f6 build_new_
0xe8a7f6 build_special_
0xede19b expand_default_init
0xede19b expand_aggr_init_1
0xede19b build_aggr_
0xec44b8 build_aggr_
0xec44b8 check_initializer
0xec2cbf cp_finish_
0xf03597 cp_parser_
0xefec29 cp_parser_
0xefe415 cp_parser_
0xefd737 cp_parser_
0xefd54a cp_parser_
0x14ba85b cp_parser_
0x14ba85b c_parse_file()
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
$ g++-7 -c test.ii
^
test.ii:18:21: error: parameter '<anonymous>' includes reference to array of unknown bound 'const long int []'
b(const long (&)[]);
test.ii:23: confused by earlier errors, bailing out
$ g++-9 -c test.ii ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~
test.ii:23:16: error: call of overloaded 'b(<brace-enclosed initializer list>)' is ambiguous
23 | blaspp<1> k({4})
| ^
test.ii:18:3: note: candidate: 'b::b<l, f, 0, f, baseclass<g, h, true, i>, j ...>::b(const long int (&)[]) [with l = double; long unsigned int f = 1; baseclass = a; int g = 0; int h = 1; i = void; j = {}]'
18 | b(const long (&)[]);
| ^
test.ii:17:3: note: candidate: 'b::b<l, f, 0, f, baseclass<g, h, true, i>, j ...>::b(long int) [with l = double; long unsigned int f = 1; baseclass = a; int g = 0; int h = 1; i = void; j = {}]'
17 | b(long);
| ^
test.ii:16:7: note: candidate: 'constexpr b::b<double, 1, 0, 1, a<0, 1, true, void> >::b(const b::b<double, 1, 0, 1, a<0, 1, true, void> >&)'
16 | class b<l, f, 0, f, baseclass<g, h, true, i>, j...> {
| ^~~~~~~
test.ii:16:7: note: candidate: 'constexpr b::b<double, 1, 0, 1, a<0, 1, true, void> >::b(b::b<double, 1, 0, 1, a<0, 1, true, void> >&&)'
test.ii:23:16: error: expected ',' or ';' at end of input
23 | blaspp<1> k({4})
| ^