From the ICU 68 website: Migration Issues New in ICU 68 ICU4C public header files no longer define and use the macros FALSE and TRUE. (ICU-21267) This avoids collisions between these macro definitions and application code that defines enum constants with these names. The ICU macros are no longer necessary: C++11 and C99 define false & true values. ICU API continues to use the ICU-specific type UBool for now; the standard values can be assigned to UBool variables and arguments without warnings. Please change call sites to use the standard false & true values where necessary. For C (as opposed to C++), these are also macros, defined in <stdbool.h>. You may transitionally define U_DEFINE_FALSE_AND_TRUE=1 if you need time to migrate code, for example in application code before including any ICU header file, or by patching unicode/umachine.h and changing # define U_DEFINE_FALSE_AND_TRUE 0 to assign value 1 instead.