<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="example suite 1" verbose="1" parallel="false" >
<test name="Regression suite 1" preserve-order="true" >
<classes>
<class name="AppLaunch"/>
<class name="Login">
<methods>
<include name="Method1"/>
<include name="Method2"/>
</methods>
</class>
<class name="SearchAccount"/>
<class name="LogOut"/>
<class name="Login">
<methods>
<include name="Method3"/>
</methods>
</class>
</classes>
</test>
</suite>
它将调用ADL找到的#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());
}
函数。虽然代码如下:
std::sort
导致模糊的重载错误。所以我有两个问题:
如何在代码#1中推断#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());
}
?
据我所知,模板实例化期间的类型推导无法回溯成员类型以找到封闭的(在这种情况下为container
)。
即使它可以回溯,为什么编译时不会造成模糊的重载错误?
答案 0 :(得分:14)
在模板参数推断期间无法推断出如何在代码#1中推断
container
?
1)使用qualified-id指定的类型的嵌套名称说明符(作用域解析运算符
::
左侧的所有内容):
这意味着您的sort
根本不会考虑重载解析,然后调用std::sort
而不会产生歧义。
代码#2没有此类问题,sort
和std::sort
都是有效的候选人,然后会导致模糊的重载错误。