@matthew_d_green typical std library implementation. the ugly names are needed to avoid clashes with user macros.