gcc nullptr issue
Estou portando código existente para compilar no gcc 4.7.2 e encontrei um problema estranho com o nullptr. Eu consegui reduzi-lo a um simples caso de teste:
#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\n", g_marker );
}
Compile isso com g ++ test.cpp -o teste -std = c ++ 0x.
A saída que eu esperaria é "Eu estava aqui 1", mas recebo "Original value", indicando que o SetMarker nunca é chamado.
Chamar Test2 ou Test3 fornece a saída esperada.
O código com o qual estou trabalhando usa o padrão visto em Test3 - originalmente sem o elenco na frente do NULL - que deu um erro na conversão inválida de int para char *, então comecei a mudar todos aqueles NULLs para nullptr. Infelizmente, isso simplesmente não se comporta corretamente.
Eu provavelmente sou forçado a mudar o código para usar o padrão no Test2 (que eu prefiro de qualquer maneira), mas estou curioso para saber se isso é um bug no compilador, ou se estou perdendo alguma coisa.