[Bug c++/55558] New: [C++11] decltype on a static member variable of a specialized class in a template function results in an internal compiler error

devkid at gmx dot net gcc-bugzilla@gcc.gnu.org
Sat Dec 1 20:52:00 GMT 2012


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55558

             Bug #: 55558
           Summary: [C++11] decltype on a static member variable of a
                    specialized class in a template function results in an
                    internal compiler error
    Classification: Unclassified
           Product: gcc
           Version: 4.7.2
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: devkid@gmx.net


The following piece of code:

template<class T> class A
{
};

class B
{
};

template<> class A<B>
{
public:
    static int member;
};

template<typename T> void foobar ()
{
    typedef decltype (A<B>::member) myType;
}

produces the following error:

test.cpp: In function 'void foobar()':
test.cpp:17:32: internal compiler error: in finish_decltype_type, at
cp/semantics.c:5274

I accidently used the actual class B instead of the template parameter T in the
foobar function and stumbled upon this error. The error is NOT reproducible
when at least ONE of the following points applies:
- the member variable 'member' is not static
- 'foobar' is not a template method
- the expression inside the decltype statement is inside another expression,
e.g. a function call or as an operand to an operator

The typedef expression is not relevant for the error, it also happens when the
decltype expression is used to declare a variable or as a template parameter.



More information about the Gcc-bugs mailing list