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