В следующем сценарии внутри функции () в строке ss << bb
я получаю сообщение об ошибке:
двоичное '<<': не найден оператор, который принимает правый операнд типа CommonType (или нет приемлемого преобразования). </p>
Мое понимание ADL состоит в том, что он будет изучать текущее пространство имен (то есть AppNamespace::InnerNamespace
), и, поскольку operator <<
не найден, он будет изучать пространство имен аргументов, а CommonType
находится в глобальном пространстве имен. Я ожидаю, что operator <<
, определенный в CommonTypes.h, будет найден.
Очевидно, мое понимание неверно. Кто-нибудь может понять, как это должно работать?
main.cpp
namespace AppNamespace
{
typedef std::vector<std::string> OtherType;
std::ostream& operator << (std::ostream& os, const OtherType& ot)
{
for (auto& el : ot)
{
os << el;
}
return os;
}
namespace InnerNamespace
{
void function()
{
CommonType bb;
std::stringstream ss;
ss << bb;
}
}
}
int main()
{
AppNamespace::InnerNamespace::function();
return 0;
}
CommonTypes.h:
#pragma once
#include <vector>
typedef std::vector<uint8_t> CommonType;
std::ostream& operator << (std::ostream& os, const CommonType& bb)
{
for (auto& el : bb)
{
os << el;
}
return os;
}