The reason why I use #define rather than typedef is to be able to use the "#ifdef uint" line. But I can change it for a typedef. Regarding c++11 support this is not really true. Clang is in a hybrid state where it has support for some c++11 features even without specifying -std=c++11. But unfortunately even without that flag __cplusplus >= 201103L. Therefore this gives rise to an error.