http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56387
--- Comment #3 from Paul Keir <pkeir at outlook dot com> 2013-02-19 12:18:17
UTC ---
I've added gcc472aliastemplatebug.cpp which also displays an unexpected error;
shown below along with the code. This is hopefully a related (and simpler)
example. Also, by using the non-template alias, "ein2", and uncommenting the
last two statements of "test", an internal compiler error occurs. Again, an
online 4.8.0 compiler gives the same errors.
template <int ...Is>
struct is1 {};
template <typename, int, int>
struct ein_helper;
template <int ...Is, int N>
struct ein_helper<is1<Is...>,N,N> {
typedef is1<Is...> type;
};
template <int ...Is, int N, int Ne>
struct ein_helper<is1<Is...>,N,Ne> {
typedef typename ein_helper<is1<Is...,N>,N+1,Ne>::type type;
};
template <typename T>
using ein1 = typename ein_helper<is1<>,0,5>::type;
using ein2 = typename ein_helper<is1<>,0,5>::type;
template <template <int ...> class C, int ...Is>
inline void burst(C<Is...> const &arg_ixs) {}
void test() {
ein1<int> abc;
// ein2 abc; // Use instead for an internal compiler error
burst(abc);
}
// Error messages:
gcc472aliastemplatebug.cpp: In function ‘void test()’:
gcc472aliastemplatebug.cpp:28:12: error: no matching function for call to
‘burst(ein1<int>&)’
gcc472aliastemplatebug.cpp:28:12: note: candidate is:
gcc472aliastemplatebug.cpp:23:13: note: template<template<int ...<anonymous> >
class C, int ...Is> void burst(const C<Is ...>&)
gcc472aliastemplatebug.cpp:23:13: note: template argument
deduction/substitution failed:
gcc472aliastemplatebug.cpp:28:12: error: type/value mismatch at argument 1 in
template parameter list for ‘template<int ...<anonymous> > class C’
gcc472aliastemplatebug.cpp:28:12: error: expected a constant of type ‘int’,
got ‘int’
// Internal compiler error:
gcc472aliastemplatebug.cpp: In function ‘void test()’:
gcc472aliastemplatebug.cpp:28:12: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://bugs.archlinux.org/> for instructions.