Упрощенный пример:
#include <iostream>
class MyLog
{
public:
using ManipulatorT = std::ostream & (*)(std::ostream &);
MyLog & operator << (ManipulatorT pF)
{
if (pF == static_cast<ManipulatorT>(&std::endl))
std::cout << "yes";
else
std::cout << "no";
return *this;
}
};
int main()
{
MyLog() << std::endl;
return 0;
}
Отрабатывает как и ожидается —
yes. Такая же логика в проекте — имеем
no.
В проекте есть 3 статических libXXX.a. Вызов operator<< идет из lib1 в lib2. В исполняемый файл все линкуется тоже статически.
Нарушение ODR или я что-то делаю не так?