Я нашел где-то, что я мог обнаружить C ++ 11, используя следующую строку:
#if __cplusplus <= 199711L
Я использую это для условно определенных типов фиксированной ширины, таких как int32_t или uchar16_t и т. Д.
Проблема в том, что при использовании Android NDK, __cplusplus
определяется как 1
,
Есть ли более портативный способ обнаружения C ++ 11 и наличия stdint.h, чтобы избежать переопределений?
Спасибо.
Для меня это всегда работает:
$ CXX=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++
$ $CXX -x c++ -E -dM /dev/null | grep __cplusplus
#define __cplusplus 199711L
$ $CXX -x c++ -std=c++11 -E -dM /dev/null | grep __cplusplus
#define __cplusplus 201103L
То же самое для цепочки инструментов LLVM:
$ CXX="$NDK/toolchains/llvm-3.5/prebuilt/darwin-x86_64/bin/clang++ -target armv7-none-linux-androideabi"$ $CXX -x c++ -E -dM /dev/null | grep __cplusplus
#define __cplusplus 199711L
$ $CXX -x c++ -std=c++11 -E -dM /dev/null | grep __cplusplus
#define __cplusplus 201103L
Я пробовал это с NDK r10d и r10e, и он работает в обоих из них, так что определенно что-то не так с вашей настройкой. Я мог бы сказать больше, если бы вы предоставили минимальный проект, где такая проблема существует.