У меня есть следующий код:C++ Выходной поток не работает с шаблонами и пространствами имен
#include <fstream>
// Removing this namespace (keeping the content) makes it work
namespace baz {
class Bar {
};
}
std::ostream & operator<<(std::ostream & stream, baz::Bar & value) {
return stream;
}
// Removing this namespace (keeping the content) makes it work
namespace goo {
template <class Type>
struct Point {
};
// Removing this function makes it work
template <class Type>
std::ostream& operator<< (std::ostream& stream, const Point<Type> &point);
void foo() {
baz::Bar test;
std::ofstream stream;
stream << test;
}
}
Это не компилируется на MSVC и выдает следующее сообщение об ошибке:
ошибка C2679: бинарный ' < < ': ни один оператор не найден, который принимает с правой операнда типа „Базом :: Bar“ (или нет приемлемого преобразования)
Однако, если я удаляю любое из двух пространств имен (сохраняя все содержимое) или удаляя шаблонную функцию <<
для класса Point
, все работает нормально.
Это ошибка в MSVC? Как я могу скомпилировать его, не удаляя пространства имен или функцию?
Попробуйте использовать 'operator :: operator <<;' или переместите его в 'namespace baz'. –