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

            Bug ID: 87372
           Summary: __PRETTY_FUNCTION__ not constexpr in gcc trunk on
                    compiler explorer
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: eric-bugs at omnifarious dot org
  Target Milestone: ---

This code will not compile with gcc trunk on compiler explorer. But it works
with gcc 8.2 on that some site. I'm worried this is a regression in current C++
development.

constexpr int zstrlen(char const *s)
{
    int i = 0;
    while (s[i]) ++i;
    return i;
}

int joe()
{
    constexpr char const * const foo = __PRETTY_FUNCTION__;
    constexpr int foolen = zstrlen(foo);
    return foolen;
}

It fails to work because __PRETTY_FUNCTION__ isn't constexpr in gcc trunk. I
get this error message:

<source>: In function 'int joe()':

<source>:11:35:   in 'constexpr' expansion of 'zstrlen(((const char*)foo))'

<source>:11:39: error: the value of '__PRETTY_FUNCTION__' is not usable in a
constant expression

11 |     constexpr int foolen = zstrlen(foo);

   |                                       ^

<source>:10:40: note: '__PRETTY_FUNCTION__' was not declared 'constexpr'

10 |     constexpr char const * const foo = __PRETTY_FUNCTION__;

   |                                        ^~~~~~~~~~~~~~~~~~~

Compiler returned: 1

Here is a link:

https://godbolt.org/z/8IdAae

Reply via email to