split off detail part of `macros.hpp` into `detail/macros_impl.hpp`