在visual c ++上使用模板功能时遇到问题

时间:2015-02-02 12:03:31

标签: c++ visual-studio

我最近正在阅读C ++ Primer的模板部分,我想在我的VS2013上试一试。 我写了一个模板,如下所示。

#include <vector>

template <typename iteratorT, typename valT>
iteratorT find(const iteratorT &up, const iteratorT &end, const valT &val)
{
    auto iter = up;
    while (iter != end && *iter != val)
        ++iter;
    return ++iter;
}

int main()
{
    std::vector<int> v{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    auto i = find(v.cbegin(), v.cend(), 7);
}

但是视觉工作室告诉我

    1   IntelliSense: more than one instance of function template "find" matches the argument list:
        function template "_InIt std::find(_InIt _First, _InIt _Last, const _Ty &_Val)"
        function template "iteratorT find(const iteratorT &up, const iteratorT &end, const valT &val)"
        argument types are: (std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<int>>>, std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<int>>>, int)   d:\Projects\ConsoleApplication1\ConsoleApplication1\Source.cpp  16  11  ConsoleApplication1

我很困惑,我没有使用“使用命名空间std”,任何人都可以告诉我为什么std版本的“find”会来到这里?

我将非常感谢你的帮助:D。

1 个答案:

答案 0 :(得分:1)

vector标题文件中包含algorithm。 由于ADL位于std命名空间中,因此将使用名称空间vector::const_iterator中的std找到gcc。如果手动包含clang头文件,则与algorithm和{{1}}相同。