c++/10223: template trickery causes ICE (segmentation fault)
Giovanni Bajo
giovannibajo@libero.it
Fri May 2 17:28:00 GMT 2003
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10223
Not really related to c++/9364 (as shown by my recent analysys of that PR).
Instead, an epurated code snippet of this PR looks this way:
--------------------------------------------
template <typename T>
struct Foo
{
template <void (T::*)()>
struct dummy;
template <typename Q>
static char test(dummy<&Q::whatever> *);
};
struct Bar {};
template struct Foo<Bar>;
//template struct Foo<int>;
--------------------------------------------
pr10223.cpp: In instantiation of `Foo<Bar>':
pr10223.cpp:14: instantiated from here
pr10223.cpp:8: internal compiler error: Segmentation fault
Please submit a full bug report,
If you instantiate the template with a basic type instead of Bar (using the
commented line instead of the other one), we get an ICE on error recovery:
pr10223.cpp: In instantiation of `Foo<int>':
pr10223.cpp:15: instantiated from here
pr10223.cpp:5: error: creating pointer to member function of non-class type
`int'
pr10223.cpp:5: internal compiler error: in retrieve_specialization, at
cp/pt.c:894
Please submit a full bug report,
I keep both the ICEs in this same PR since they are very likely related.
Reconfirmed on every GCC version I have (2.95 -> mainline CVS 20030430).
After this redux has been fixed, I suggest trying again the original code
provided by the poster, which could reveal other problems.
Giovanni Bajo
More information about the Gcc-bugs
mailing list