https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71569

            Bug ID: 71569
           Summary: [5/6] Crash: External definition of template member
                    from template struct
           Product: gcc
           Version: 5.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: oliver.tale at web dot de
  Target Milestone: ---

Created attachment 38718
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=38718&action=edit
gcc -v -save-temps crash.cpp

Check out this:

------------------------------------------------------------
template <class T>
class Foo
{
    template <class U>
    static bool Bar;
};

template<class T>
template<class U>
bool Foo<T>::Bar<U>;

int main()
{ }
------------------------------------------------------------

I know that its not valid code, because <= 4.9.3 report the following:

"5 : error: template declaration of 'bool Bar'
static bool Bar;
^
10 : error: expected initializer before '<' token
bool Foo<T>::Bar<U>;
^"

But since 5.1 and up to 6.1.1 - it just crashes:

"crash.cpp:10:14: internal compiler error: in determine_specialization, at
cp/pt.c:2075
bool Foo<T>::Bar<U>;"
See the attachment for stack trace.

I couldnt get my hand on a 4.9.4 or 5.0 or something newer than 6.1.1, maybe
someone can track the exact version jump.
Must be between 4.9.3 and 5.1.

Reply via email to