[英]Why parameter deduction doesn't work in this template template parameter
我有以下模板函数,其中模板模板参数作为其参数。
template<typename T,
template <typename... ELEM> class CONTAINER = std::vector>
void merge(typename CONTAINER<T>::iterator it )
{
std::cout << *it << std::endl;
}
以下代码使用此代码。
std::vector<int> vector1{1,2,3};
merge<int>(begin(vector1));
它按预期工作,但是当我使用时
merge(begin(vector1));
它不能推断出T
类型。
我认为它可以从std::vector<int>::iterator it;
推断出类型std::vector<int>::iterator it;
作为int
。
为什么编译器无法推断出类型?
我认为它可以从
std::vector<int>::iterator it;
推断出类型std::vector<int>::iterator it;
作为int。为什么编译器无法推断出类型?
没有。
编译器不能:查找“非推导上下文”以获取更多信息。
并且期望扣除是不合理的。
假设一个类如下
template <typename T>
struct foo
{ using type = int; };
类型type
总是 int
; 无论什么是T
型。
并假设功能如下
template <typename T>
void bar (typename foo<T>::type i)
{ }
接收int
值( typename foo<T>::type
始终为int
)。
应从以下调用中推断出哪种T
类型?
bar(0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.