I am porting existing code to compile under gcc 4.7.2 and have run into a strange issue with nullptr. I have managed to boil it down to a simple test case:
#include <stdio.h>
const char* g_marker = "Original value";
void SetMarker( const char* s )
{
g_marker = s;
}
char* Test1()
{
return SetMarker( "I was here 1" ), nullptr;
}
char* Test2()
{
SetMarker( "I was here 2" );
return nullptr;
}
char* Test3()
{
return SetMarker( "I was here 3"), (char*)NULL;
}
int main()
{
char* returnValue = Test1();
printf( "%s
", g_marker );
}
Compile this with g++ test.cpp -o test -std=c++0x.
The output I would expect is "I was here 1", but I get "Original value", indicating that SetMarker is never called.
Calling either Test2 or Test3 gives the expected output.
The code I'm working with uses the pattern seen in Test3 - originally without the cast in front of the NULL - that gave an error on invalid conversion from int to char* so I started changing all those NULLs to nullptr. Unfortunately, that just doesn't behave correctly.
I'm likely forced to change the code to use the pattern in Test2 (which I prefer anyway) but I'm curious to know if this is a bug in the compiler, or if I'm missing something.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…