Gnu C ++ macro __cplusplus padrão está em conformidade?

O compilador Gnu C ++ parece definir__cplusplus ser estar1

#include <iostream> 
int main() {
  std::cout << __cplusplus << std::endl;
}

This prints1 com gcc no modo c ++ padrão, bem como no modo C ++ 0x, comgcc 4.3.4 e gcc 4.7.0.

O C ++ 11 FDIS diz em "16.8 Nomes de macro predefinidos [cpp.predefined]" qu

O nome__cplusplus é definido comovalue 201103L ao compilar uma unidade de tradução C ++. (Nota de rodapé: Pretende-se que as versões futuras desta norma substituam o valor dessa macro por um valor maior. Os compiladores não conformes devem usar um valor com no máximo cinco dígitos decimais.)

O antigo C ++ 03 padrão tinha uma regra semelhant

O GCC está definindo isso deliberadamente para1, porque é "não conforme"?

Ao ler essa lista, pensei que poderia usar__cplusplus para verificar de maneira portátil se eu tenho um compilador habilitado para C ++ 11. Mas comg ++ isso não parece funcionar. Eu sei sobre o...EXPERIMENTAL... macro, mas ficou curioso por queg ++ está definindo__cplusplus por aqui

Meu problema original era alternar entre diferentes variantes de ponteiro nulo. Algo assim

#if __cplusplus > 201100L
#  define MYNULL nullptr
#else
#  define MYNULL NULL
#endif

Existe uma maneira simples e razoavelmente portátil de implementar essa opçã

questionAnswers(3)

yourAnswerToTheQuestion