[英]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.