With the introduction of modules in C++20 we finally have a tool to encapsulate code from one another. Especially because the preprocessor macros don't leak to other modules.
Afaik, the reserved names (like _Tp, _First, __last) were introduced to avoid macros messing up the standard library implementation, for example:
#define first Yabba Dabba Doo
template <typename RanIt>
std::sort(RanIt first, RanIt last);
I'm aware that the standard library won't be modularized for C++20, but probably for C++2x. Would a modularized implementation of the standard library finally allow normal, readable names for things like parameters and internal types (without running into UB or compiler errors) or is there some other restriction blocking this?