Для constexpr нужен "Literal Type"
A constexpr specifier used in an object declaration declares the object as const.
Such an object shall have literal type and shall be initialized.
https://eel.is/c++draft/dcl.constexpr#6
A type is a literal type if it is:
-- a possibly cv-qualified class type that has all of the following properties:
it has a constexpr destructor ([dcl.constexpr]),
all of its non-static non-variant data members and base classes are of non-volatile literal types, and
has at least one constexpr constructor
https://eel.is/c++draft/basic.types#general-10
а у error_category
как не constexpr
деструктор
https://eel.is/c++draft/syserr.errcat.overview
class error_category {
public:
constexpr error_category() noexcept;
virtual ~error_category();
поэтому её объект не может быть constexpr
.
Однако можно использовать constinit
.