Do Bjarne Stroustrup C ++ 0x FAQ :
__cplusplus
Em C ++ 0x a macro __cplusplus
será definida com um valor diferente (maior que) do atual 199711L
.
Embora isso não seja tão útil quanto você gostaria. gcc
(aparentemente por quase 10 anos) tinha esse valor definido como 1
, descartando um grande compilador, até que foi corrigido quando o gcc 4.7.0 foi lançado .
Estes são os padrões C ++ e qual valor você deve esperar em __cplusplus
:
- C ++ pré-C ++ 98:
__cplusplus
é1
.
- C ++ 98:
__cplusplus
é199711L
.
- C ++ 98 + TR1: Lê-se como C ++ 98 e não há como verificar se eu conheço.
- C ++ 11:
__cplusplus
é201103L
.
- C ++ 14:
__cplusplus
é201402L
.
- C ++ 17:
__cplusplus
é 201703L
.
Se o compilador for mais antigo gcc
, precisamos recorrer a hackeamentos específicos do compilador (veja uma macro de versão, compare-a a uma tabela com recursos implementados) ou use Boost.Config (que fornece macros relevantes ). A vantagem disso é que podemos escolher recursos específicos do novo padrão e escrever uma solução alternativa se o recurso estiver ausente. Freqüentemente, isso é preferido em vez de uma solução de atacado, pois alguns compiladores afirmam implementar C ++ 11, mas oferecem apenas um subconjunto dos recursos.
O Stdcxx Wiki hospeda uma matriz abrangente para suporte do compilador de recursos C ++ 0x (se você se atrever a verificar os recursos você mesmo).
Infelizmente, uma verificação mais refinada de recursos (por exemplo, funções de biblioteca individuais como std::copy_if
) só pode ser feita no sistema de compilação de seu aplicativo (execute o código com o recurso, verifique se ele compilou e produziu resultados corretos - autoconf
é a ferramenta de escolha se usar esta rota).