Да : так как они оба находятся в глобальном пространстве имен, это абсолютно нарушает ODR.
Нет исключения для типов классов, используемых только в пределах единицы перевода, в которой они определены; программа может содержать только один тип класса с любым именем.
Это самое первое требование для соответствия критериям для исключения из этого правила:
В программе может быть более одного определения [..] тип класса [..] в программе, при условии, что каждое определение появляется в другой единице перевода, и при условии, что определения удовлетворяют следующие требования. [..] При условии, что такая сущность с именем D
определена в более чем одной единице перевода, должны быть выполнены все следующие требования. [..] Каждое определение D
должно состоять из одинаковой последовательности токенов [..] ( ref )
Разработчики просто «повезло», что компоновщик не пытался делать какие-либо шалости, которые приводят к симптомам этого нарушения.
Для этого и нужны пространства имен. Например, если тип класса используется только внутри единицы перевода, в которой он определен, он мог быть определен в анонимном пространстве имен.