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

            Bug ID: 67033
           Summary: [c++11] template argument invalid for integral
                    constant expression beginning with address-of
                    expression
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ed at catmur dot co.uk
  Target Milestone: ---

template<bool B> struct S { };
int x;
S<&x == &x> s;
// error: template argument 1 is invalid
//        ^

&x == &x is a valid converted constant expression of type bool.

The problem is that cp_parser_template_argument sees the initial '&' and
decides that the non-type template argument must be the address-of operator
applied to an id-expression; when it fails to reach the end of the template
argument it aborts.

This behavior is valid for <= C++03, where '&' cannot appear in a constant
expression, but C++11 is more relaxed.

Reply via email to