This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/77557] New: gcc doesn't warn about code (clang does), __PRETTY_FUNCTION__ used in struct in function
- From: "marmoo1024 at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 11 Sep 2016 07:29:08 +0000
- Subject: [Bug c++/77557] New: gcc doesn't warn about code (clang does), __PRETTY_FUNCTION__ used in struct in function
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77557
Bug ID: 77557
Summary: gcc doesn't warn about code (clang does),
__PRETTY_FUNCTION__ used in struct in function
Product: gcc
Version: 6.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: marmoo1024 at gmail dot com
Target Milestone: ---
I don't know about the standard, I'm afraid to embark on a grand quest to read
the whole thing. But the code below is accepted by g++ (4.8.5, 5.3.0 and 6.1.1)
without a warning, even with -Wall, but clang++ emits a sensible seeming
warning. Also, the value differs between clang and gcc. In gcc it's the name of
the function, in clang it's the class constructor.
Is gcc doing the right thing?
gcc compiled prog outputs "void fn()", clang compiled code outputs
"fn()::getter::getter()".
clang emits this warning,
test_1.cpp:6:21: warning: predefined identifier is only valid inside function
[-Wpredefined-identifier-outside-function]
const char * fn = __PRETTY_FUNCTION__;
^
1 warning generated.
== code ==
#include <stdio.h>
void fn () {
struct getter {
const char * fn = __PRETTY_FUNCTION__;
};
printf ("%s\n",getter().fn);
};
int main () {
fn();
}