Há uma constante chamada __cplusplus
que os compiladores C ++ devem definir para a versão do padrão C ++ compatível, consulte isto
#if __cplusplus <= 199711L
#error This library needs at least a C++11 compliant compiler
#endif
Ele está definido como 199711L no Visual Studio 2010 SP1, mas não sei se os fornecedores serão tão ousados em aumentá-lo se eles apenas tiverem suporte (parcial) no nível do compilador versus uma biblioteca C ++ padrão com todas as alterações do C ++ 11 .
Portanto, as definições de Boost mencionadas em outra resposta continuam sendo a única maneira sensata de descobrir se há, por exemplo, suporte para threads C ++ 11 e outras partes específicas do padrão.
template <typename... Test> struct compiler_must_support_variadic_templates;
. Um erro de sintaxe revelaria rapidamente o problema. (Como um aparte, uma mensagem de erro adequada é muito melhor.)