support C++03/C99