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

--- Comment #11 from Benjamin Buch <benni.buch at gmail dot com> ---
Also test case #3 doesn't work if you declare the function return type auto:

constexpr auto foo ()
{
  static_assert (0 == __builtin_strcmp (__func__, "foo"), "#1");
  static_assert (0 == __builtin_strcmp (__FUNCTION__, "foo"), "#2");
  static_assert (0 == __builtin_strcmp (__PRETTY_FUNCTION__, "constexpr int
foo()"), "#3");

  return 1;
}

static_assert (foo (), "#4");

void bar ()
{
  static_assert (0 == __builtin_strcmp (__func__, "bar"), "#5");
  static_assert (0 == __builtin_strcmp (__FUNCTION__, "bar"), "#6");
  static_assert (0 == __builtin_strcmp (__PRETTY_FUNCTION__, "void bar()"),
"#7");
}


$ g++ -std=c++17 gcc-test.cpp
gcc-test.cpp: In Funktion »constexpr auto foo()«:
gcc-test.cpp:5:3: Fehler: statische Erklärung gescheitert: #3
   static_assert (0 == __builtin_strcmp (__PRETTY_FUNCTION__, "constexpr int
foo()"), "#3");
   ^~~~~~~~~~~~~
bebuch@pcbebuch:~/media/projekte/test$ g++ -std=c++17 gcc-test.cpp              
gcc-test.cpp: In Funktion »constexpr auto foo()«:
gcc-test.cpp:5:3: Fehler: statische Erklärung gescheitert: #3
   static_assert (0 == __builtin_strcmp (__PRETTY_FUNCTION__, "constexpr int
foo()"), "#3");
   ^~~~~~~~~~~~~
gcc-test.cpp: In Funktion »void bar()«:
gcc-test.cpp:14:3: Fehler: Nicht-konstante Bedingung für statische Behauptung
   static_assert (0 == __builtin_strcmp (__func__, "bar"), "#5");
   ^~~~~~~~~~~~~
gcc-test.cpp:14:40: Fehler: »__builtin_strcmp(((const char*)(& __func__)),
((const char*)"bar"))« ist kein Konstantenausdruck
   static_assert (0 == __builtin_strcmp (__func__, "bar"), "#5");
                       ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
gcc-test.cpp:15:3: Fehler: Nicht-konstante Bedingung für statische Behauptung
   static_assert (0 == __builtin_strcmp (__FUNCTION__, "bar"), "#6");
   ^~~~~~~~~~~~~
gcc-test.cpp:15:40: Fehler: »__builtin_strcmp(((const char*)(& __FUNCTION__)),
((const char*)"bar"))« ist kein Konstantenausdruck
   static_assert (0 == __builtin_strcmp (__FUNCTION__, "bar"), "#6");
                       ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
gcc-test.cpp:16:3: Fehler: Nicht-konstante Bedingung für statische Behauptung
   static_assert (0 == __builtin_strcmp (__PRETTY_FUNCTION__, "void bar()"),
"#7");
   ^~~~~~~~~~~~~
gcc-test.cpp:16:40: Fehler: »__builtin_strcmp(((const char*)(&
__PRETTY_FUNCTION__)), ((const char*)"void bar()"))« ist kein
Konstantenausdruck
   static_assert (0 == __builtin_strcmp (__PRETTY_FUNCTION__, "void bar()"),
"#7");
                       ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$ g++ --version
g++ (GCC) 8.0.0 20170816 (experimental)
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Reply via email to