always be compatible with clang