CLANG++:错误:对"分区"的调用不明确
clang++: error: call to 'partition' is ambiguous
#include <algorithm>
#include <vector>
template <class BidirectionalIterator, class UnaryPredicate>
BidirectionalIterator partition(BidirectionalIterator first,
BidirectionalIterator last, UnaryPredicate pred)
{
while (first != last) {
while (pred(*first)) {
++first;
if (first == last) return first;
}
do {
--last;
if (first == last) return first;
} while (!pred(*last));
std::swap(*first, *last);
++first;
}
return first;
}
int main() {
std::vector<int> v = { 1, 55, 17, 65, 40, 18, 77, 37, 77, 37 };
partition(v.begin(), v.end(), [](const int &i) {
return i < 40;
});
return 0;
}
代码无法编译。clang++(3.5.2/cygwin)和Visual Studio(2013)都抱怨不明确的调用。由于没有使用using
指令,我不明白出了什么问题。要成功编译,使用前缀会有所帮助::
。
您的partition
与std::partition
有名称冲突
即使没有 std::
前缀,它这样做的原因是因为它对带有std::
命名空间的参数使用参数依赖查找 (ADL),这些参数std::vector<int>::iterator
。因此,编译器能够"看到"std::partition
函数以及partition
函数。
来自 cpp 偏好(强调我的)
。对于函数调用表达式中的每个参数以及模板函数的每个模板参数,将检查其类型以确定它将添加到查找中的关联命名空间和类集
相关文章:
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- 为什么调用不明确的 ctor 时没有编译时错误?
- G++ 错误:重载的"abs(无符号 int)"的调用不明确
- 如果存在具有不同参数的继承成员,为什么对 C++ 结构函数的调用不明确?
- 错误:重载'stoi(nlohmann::basic_json<>::value_type&)'的调用不明确
- 构建 castalia 时出错:重载函数的调用不明确
- 错误:重载的"abs(double)"调用不明确
- 结构构造函数调用不明确
- 错误:对重载函数的调用不明确
- 对重载'swap(char&, char&)'的调用不明确
- 对可变模板函数的调用不明确
- C++ 编译错误:重载的"<function_name>(char*&)"调用不明确
- VS2010中具有list_of的调用不明确
- 为什么这个运算符=调用不明确
- 为什么对重载函数的调用不明确
- C++中重载运算符函数对构造函数的调用不明确
- 为什么这些重载函数调用不明确
- 重载write(int)的调用不明确
- 带有重载r值引用函数的调用不明确
- 传递0而不是1时,sfinae调用不明确