複数のキャストが存在するクラスの operator<< があいまいで解決できないという話
とあるクラスに int と double のキャストオペレーターが定義されている。このためユニットテストフレームワークが生成する operator<< があいまいになりコンパイルできず困る、という話を伝え聞いた。そんなときは operator<< オーバーロードを定義すればいいんじゃない?
#include <iostream> struct Foo { operator int() const { return 0; } operator double () const { return 1; } }; namespace { std::ostream& operator<< (std::ostream& o, const Foo& v) { return o << static_cast<int>(v); } } // operator<< の解決を強制する int main() { std::cout << Foo() << std::endl; return 0; }
こういう問題への解決を考えることが好き。