なぜ次のコードでコンパイルエラーが発生するのですか?バイナリGoogleのテストと演算子<< STL型のオーバーロード
エラーC2679 '< <':なしオペレータは型「constのSTDの右 オペランドをとる見つからない::ペア私は、Visual Studio 2015のエラーテキストが使用
#include <iostream> #include "gtest/gtest.h" #include <utility> namespace A { //overloading operator << for std::pair template<typename T1, typename T2> std::ostream& operator<<(std::ostream& os, const std::pair<T1, T2>& p) { return os << "pair:{" << p.first << ", " << p.second << "}"; } struct C { int x; }; std::ostream& operator<<(std::ostream& os, const C& c) { return os << c.x; } TEST(TestA, testA) { std::pair<C, C> pair1; std::pair<int, int> pair2; EXPECT_EQ(0, 0) << pair1; //compiles EXPECT_EQ(0, 0) << pair2; //doesn't compile } }
'(あるいは全く許容 変換はありません)... \ GTEST \ GTEST-message.h 131ビルトイン型にユーザー定義型を変更すると違いがどのように
?
Upd。 @Kerrek SBのおかげで、エラーが説明されています。しかし今、別の質問があります:std::pair
のために、私はどのように私のコードのようにそれを使用できるようにオペレータ< <をオーバーロードすべきですか?
:だからコードは、この(私が意味をなすためにそれを変更)のようにする必要があります。 –
しかし、それは 'pair'のためにそれを見つける。なぜそれは 'pair 'のためにそれを見つけることができないのですか? –
テンプレートとADL。 'C'は名前空間' A'にあるので、 'A'はその検索のための関連する名前空間の中にあります。 –