namespace ns1
{
template <class T>
void f(T)
{
cout << typeid(T).name() << endl;
}
};
using namespace ns1;
namespace ns2
{
void f(int)
{
cout << "int" << endl;
}
void test()
{
f(vector<int>()); // Error!
// Why not call ns1::f<vector<int>>(vector<int>()); ???
}
};
答えて
これはテンプレートとは関係ありませんが、名前のルックアップはありません。
これは、標準は3.4/1で言っていることである(名前検索):
名ルックアップは(10.2を参照)の名前のための明確な 宣言を見つけるものとします。 名前ルックアップは、 が1つの宣言を関数名にする場合、1つの宣言と名前との間に1つ以上のという名前を関連付けることができます。 宣言は、 オーバーロード関数の集合(13.1)を形成すると言われています。 名前の参照が成功した後に、オーバーロードの解像度(13.3)が発生します。 アクセスルール(第11節)は、一度名前検索を行うと となり、 関数のオーバーロード解決( が該当する)が成功しました。
と3.4.1(非修飾名検索)で:
名ルックアップは、すぐ宣言は、あなたの場合は名前
のために発見されたとして終了し、f
があります修飾されていない名前。直後のスコープ内で、名前空間ns2
で検索されます。この宣言はです。名前のルックアップがここで終了し、オーバーロードの解決が行われます。引数のタイプがstd::vector<int>
に一致する候補セットに過負荷がないため、プログラムは不正です。
ネームスペース(ns2)内にあるときは、名前が修飾されていないと他のネームスペースより優先されます。
ns2は現在の名前空間であるため、ns1 :: f()の意味をコンパイラが考えるべきなのはなぜですか?
これは動作するはずです:
namespace ns1
{
template <class T>
void f(T)
{
cout << typeid(T).name() << endl;
}
};
namespace ns2
{
using ns1::f;
void f(int)
{
cout << "int" << endl;
}
void test()
{
f(vector<int>()); // Error!
// Why not call ns1::f<vector<int>>(vector<int>()); ???
}
};
実用的なソリューションに感謝します。 – xmllmx
- 1. MOVWFがステータスレジスタに影響しないのはなぜですか?
- 2. なぜxxxは関数ではない
- 3. なぜCefSharp.WebBrowserExtensions.SetZoomLevelはすべてのインスタンスに影響しますか?
- 4. CSSがこのボタン要素に影響しないのはなぜですか?
- 5. UIView.animateWithDurationがこのカスタムビューに影響しないのはなぜですか?
- 6. bindingRedirectがFSharp.Coreのバージョンに影響しないのはなぜですか?
- 7. トーストテーブルがエクスポンション(分析)に影響しないのはなぜですか?ここ
- 8. SMTPの影響でPHP Mail()関数が無効になっていますか?
- 9. 変数の新しい値がボイド更新に影響しないのはなぜですか?
- 10. mallocはRAMの使用に影響しません。なぜですか?
- 11. コンパイラは "namespace std;"を使用してヘッドファイルに影響しますか?そして走行速度は?
- 12. なぜ私のボタンにGravityが影響しないのですか?
- 13. ブートストラップ - なぜ "control-label"クラスがラベルに影響しないのですか?
- 14. Javascript関数は角度テンプレートに影響しません
- 15. なぜ遅延がない、UIView.animate(withDurationが影響していない?
- 16. 関数の呼び出し順序がなぜ借用に影響しますか?
- 17. setImageBitmapがカスタムImageButtonに影響を与えないのはなぜですか?
- 18. roxygen2:@exportを使用してもNAMESPACEに関数がエクスポートされない
- 19. なぜwhere節がパフォーマンスに影響しますか?
- 20. オーバーロード中にconstを使用しない場合の影響
- 21. ゲームで数式テンプレートを使用しないのはなぜですか?
- 22. 子コンテナが親に影響するのはなぜですか
- 23. file.tell()がエンコードに影響するのはなぜですか?
- 24. テキストアライメントがキャンバスに影響するのはなぜですか?
- 25. FirefoxでなぜFunction.prototype.func = ...はconsole.logに影響しませんか?
- 26. なぜshouldAutorotateは()のiPadには影響しませんか?
- 27. カミナリページングがテーブルに影響しない
- 28. C++:Void関数の影響を受けない変数
- 29. 模倣があなたのアサーション数に影響しますか?
- 30. パラメータでsplatを使用しているときに関数が機能しないのはなぜですか?
をどうもありがとうございました。あなたの答えは、常に迅速かつ正確です。 – xmllmx