Указатель на манипулятор &std::endl
От: vng Беларусь https://organicmaps.app/
Дата: 31.03.21 09:17
Оценка: 1 (1)
Упрощенный пример:
#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 или я что-то делаю не так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.