Inc*_*ble 11 c++ templates language-lawyer argument-dependent-lookup c++17
#include <iterator>
#include <algorithm>
#include <iostream>
#include <vector>
template <typename container>
void sort(typename container::iterator beginning,
typename container::iterator end)
{
std::cout << "calling custom sorting function\n";
}
int main()
{
std::vector<int> v{1, 2, 3};
sort(v.begin(), v.end());
}
Run Code Online (Sandbox Code Playgroud)
它将调用std::sortADL找到的函数.虽然代码如下:
#include <iterator>
#include <algorithm>
#include <iostream>
#include <vector>
template <typename Iterator>
void sort(Iterator beginning,
Iterator end)
{
std::cout << "calling custom sorting function\n";
}
int main()
{
std::vector<int> v{1, 2, 3};
sort(v.begin(), v.end());
}
Run Code Online (Sandbox Code Playgroud)
导致模糊的过载错误.所以我有两个问题:
如何container在代码#1中推断出来?
据我所知,模板实例化期间的类型推导不能回溯成员类型以找到封闭的(std::vector<int>在这种情况下).
即使它可以回溯,为什么编译时不会导致模糊的过载错误?