У меня проблема с нарушением ODR в случае многократной реализации оператора одного и того же типа в разных единицах перевода, но в одной и той же цели сборки.
Пример:
Проверка модуля.exe компилируется с Test1.cpp и Test2.cpp.Которые используют общий тип TYPE
struct TYPE
{
FieldType1 Field1
...
FieldTypeN FieldN
};
Test1.cpp и Test2.cpp реализуют специфический оператор == () для TYPE длясравнивайте TYPE только с точки зрения некоторых значений.Например, мне нужно проверить только поле Id и не хочу заполнять все остальные поля, чтобы тест был коротким и чистым.То же самое для других операторов, таких как operator << () </strong>
В обоих тестовых файлах используется внешняя тестовая библиотека (BOOST TEST, hippomock и т. Д.), В которой используется operator == () для сравнения типов.Когда я пытаюсь построить тест, у меня появляется ошибка о множественном определении (или просто случайная связанная функция в случае MSVC).
Я попытался поместить каждый оператор в отдельное пространство имен и затем набрать
using namespace::operator==;
внутри * .cpp файла, но это не помогает.
Можно ли избежать этой проблемы?