私のコードがコンパイルされず、C++でそれを実現した理由を実証しようとしました引数依存型参照はテンプレートのtypename名前検索範囲を決定するための引数。型がクラステンプレートの特殊化である引数のADLの背後にあるもの
#include <string>
#include <functional>
namespace myns {
template<typename T>
struct X
{};
template<typename T>
auto ref(T) -> void
{}
} // namespace myns
auto main() -> int
{
ref(myns::X<int>{});
ref(myns::X<std::string>{}); // error: call to 'ref' is ambiguous
}
だから、かつてのREFコールコンパイル、後者はコンパイルされませんが、それはmyns::ref()
などstd::ref
私の質問はこれがいかにで見つけたのでmyns::X<int>
のみmyns::ref
が、考えられているので、有用?なぜ私はこれが必要でしょうか?アイデアや例がありますか?今のところ私は上記の例のような不具合を見るしかありませんが、不必要なあいまいさがあります。
*任意の*タイプを受け入れる機能が必要ですか?それ以外の場合、 'auto ref(X) - > void'は' std :: ref'よりも良い一致となり、過負荷解決によって選択されます。 –
残念ながらはい、私はします。 – witosx