This is CWG issue 2374.
In C++17, before the resolution of this issue, direct-list-initialization of an enumeration with a fixed underlying type by a single expression was specified to always be equivalent to a functional style cast. A functional style cast then would be equivalent to a static_cast
and that would actually be allowed between different enumeration types (by going through the promoted underlying type).
With the issue resolution this path is taken only if the initializer expression is implicitly convertible to the enumeration type, which doesn't allow for conversion between different enumeration types.
That seems to have been an oversight in the resolution of a prior issue for C++17: CWG 2251
It seems that Clang decided to faithfully implement CWG 2251 and only revert this special case once CWG 2374 was resolved and the fix for the latter will be included with Clang 15.
For GCC the same seems to apply before GCC 12.
MSVC seems to forbid the conversion only in conformance mode (/permissive-
or C++20 or later mode) and only since v19.25.