Gcc nullptr problema

Estoy portando el código existente para comstackr bajo gcc 4.7.2 y me he encontrado con un problema extraño con nullptr. He logrado reducirlo a un simple caso de prueba:

#include  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 ); } 

Comstack esto con g ++ test.cpp -o test -std = c ++ 0x.

El resultado que esperaría es “Estaba aquí 1”, pero obtengo “Valor original”, lo que indica que nunca se llama a SetMarker.

Al llamar a Test2 o Test3 se obtiene el resultado esperado.

El código con el que estoy trabajando usa el patrón visto en Test3, originalmente sin el lanzamiento delante del NULL, que dio un error en la conversión no válida de int a char *, así que comencé a cambiar todos esos NULL a nullptr. Desafortunadamente, eso simplemente no se comporta correctamente.

Es probable que me obliguen a cambiar el código para usar el patrón en Test2 (que prefiero de todos modos) pero tengo curiosidad por saber si se trata de un error en el comstackdor o si me falta algo.

Este es un error en g ++: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52988

g ++ nullptr_t efectos secundarios en expresiones de tipo nullptr_t , en el supuesto de que todos los valores de nullptr_t son equivalentes (lo que son, pero eso no significa que pueda ignorar los efectos secundarios).

Esto se soluciona en la versión 4.8.0; Las nuevas versiones en las twigs 4.x (4.6.4 y 4.7.3) también deberían tener la solución.