У меня есть две библиотеки, одна из которых зависит от другой.Первая библиотека определяет некоторые перечисления и предоставляет оператор << (), который печатает короткий фрагмент текста для каждого перечисления.У меня есть модульные тесты, доказывающие, что это работает. </p>
Вторая библиотека, которая зависит от первой, передает значение перечисления в std :: cout (std :: ostringstream ведет себя так же) и получает соответствующее числовое значение довольночем текст.Шаблонный код не используется, так что это не проблема шаблона и перегрузки.Я просмотрел вывод препроцессора, чтобы убедиться, что правильные определения видны.Я использую g ++ 4.1.2.
Я не могу воспроизвести проблему за пределами моих библиотек (которые состоят из тысяч строк), поэтому я не могу опубликовать пример кода.Моя попытка создать пример кода также убеждает меня, что я понимаю, как это должно работать.Я предполагаю, что что-то, включенное в один из заголовков, заставляет компилятор сделать другой выбор при выборе оператора << для использования.</p>
Мой вопрос: Как я могу получить представление о том, какой выбор имеет компилятор при выборе версии используемого оператора и почему он выбрал стандартную вместо моей.
Редактировать : Добавление подписей в соответствии с запросом: Обратите внимание, что этот упрощенный пример не демонстрирует проблему.
Заголовок из первой библиотеки:
namespace utcp {
enum GainType {AGC_GAIN_MODE, MAN_GAIN_MODE };
}
// I've tried this passing the argument by value as well.
inline std::ostream& operator<<(std::ostream &os, const hdr::GainType &val)
{...}
Код из второй библиотеки
std::cout << "Gain Text: " << hdr::AGC_GAIN_MODE << std::endl;