https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90291
--- Comment #7 from Igor A. Goussarov <igusarov at mail dot ru> --- The intent is to have a lot of services, each defined in its dedicated namespace. The hierarchy of those namespaces can grow to arbitrary depth: component component::service_a component::group_b::service_c component::group_b::service_d component::third_party::domain::service_e Each service may have header-only public part and private part. Private part must be placed in namespace `detail` under the namespace of its corresponding service. So we have: component::detail component::service_a::detail component::group_b::service_c::detail component::group_b::service_d::detail component::third_party::domain::service_e::detail Now, if some team decided to put their service in an inline namespace (say, if their service is common enough), the identity of detail namespaces is ruined because they start merging with each other, subject to the order of header files inclusion. And that leads to ODR violation and weird linker errors...