■30873 / ) |
Re[2]: ADL ってどこまで効くの? |
□投稿者/ 774RR (278回)-(2009/01/08(Thu) 15:06:53)
|
なるほど。最初の例で書いた typedef std::string value_type; の場合は確かに
オレオレ operator<< の template を丸ごと削除してもコンパイル通ってしまいました。
俺の知らないうちに ADL が std::operator を見つけてしまっていて、
オレオレ 無名名前空間::operator は使われていないのですな。
struct value_type : std::pair<....> {}; とすればいい、んぢゃね?も納得です。
*ですが*
Q1.
「俺は c.push_back(make_pair("a", "b")); と書きたいんぢゃあ!」
というわがままな要件にどう対応すればいいでしょう? (wcout 時に L"a" に直すのは手でやるとして)
struct value_type : std::pair<std::string, std::string> {
value_type(const std::pair<std::string, std::string>& a) : std::pair<std::string, std::string>(a) {}
};
としたのでは c.push_back(make_pair(string("a"), string("b"))); としなけりゃなりません。
Q2. (まあ Q1 と状況は同じなのですが)
typedef std::pair<...> value_type; が変更できない場合、オレオレ operator<< をどう実装すべきでしょう?
ないしは、実装できるのでしょうか?できないのでしょうか?
|
|