gcc 4.7.2 でコンパイルするために既存のコードを移植していますが、nullptr で奇妙な問題が発生しました。私はそれを簡単なテストケースに要約することができました:
#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 );
}
これを g++ test.cpp -o test -std=c++0x でコンパイルします。
私が期待する出力は「I was here 1」ですが、SetMarker が呼び出されないことを示す「元の値」が得られます。
Test2 または Test3 を呼び出すと、期待される出力が得られます。
私が取り組んでいるコードは、Test3 で見られるパターンを使用しています。元々は NULL の前にキャストがありませんでしたが、int から char* への無効な変換でエラーが発生したため、これらすべての NULL を nullptr に変更し始めました。残念ながら、それは正しく動作しません。
Test2 のパターンを使用するようにコードを変更せざるを得ない可能性がありますが (どちらかというと好みます)、これがコンパイラーのバグなのか、それとも何か不足しているのか知りたいです。