Const variables at namespace scope have always had implicit internal storage duration (a.k.a. "implicitly static"). In C++11 and later, this also includes `constexpr` variables because `constexpr` implies const. In C++17, inline variables were added as an exception to this rule: so if you don't declare it inline, then it's implicitly static, but if you do declare it inline, then it's just inline. In C++20, variables declared in modules are also an exception:
http://eel.is/c++draft/basic.link#3.2.1It's correct that you can avoid this either by having the non-defining declaration earlier in the TU or by putting `extern` on the definition.