为什么将迭代器 '(vector<int> a).begin()' 传递给参数 'vector<T>::iterator b' 时无法推断 'T' 的类型?

问题描述 投票:0回答:1

有以下代码:

template<typename T>
void test(const typename std::vector<T>::iterator &i){

}

int main(int argc, char **argv)
{
    std::vector<int> a;
    test(a.begin());
}

编译会提示无法推导“test(a.begin())”行的类型“T”的错误。看起来应该是很容易推断出来的。是否有任何特殊原因导致编译器无法正确推导它?

C++ 标准:14

编译器:Apple clang 版本15.0.0

c++ templates
1个回答
0
投票

您正在使用称为 CTAD 的 C++ 功能。这是 C++17 功能,您明确指定您正在使用 14。

cppreference:https://en.cppreference.com/w/cpp/language/class_template_argument_deduction

© www.soinside.com 2019 - 2024. All rights reserved.