有以下代码:
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
您正在使用称为 CTAD 的 C++ 功能。这是 C++17 功能,您明确指定您正在使用 14。
cppreference:https://en.cppreference.com/w/cpp/language/class_template_argument_deduction