我有以下代碼: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:二進制「 < <':沒有操作員發現它接受一個右手 的操作數類型的‘巴茲::酒吧’(或沒有可接受的轉化率)
但是,如果我刪除了兩個命名空間中的任何一個(保留所有內容)或刪除Point
類的模板化<<
函數,則一切正常。
這是MSVC中的錯誤嗎?如何在不刪除名稱空間或函數的情況下進行編譯?
嘗試使用:: operator <<;'或將其移動到'namespace baz'。 –