[英]Is not matching a template<typename…> to template<typename> a defect?
在探索這個答案的過程中,我發現需要參數包的模板不會被需要具有特定參數數量的模板的模板所接受。
在我看來,這是一個缺陷,因為如果模板可以采用任意數量的參數,它應該能夠映射到特定的數字。 是否有語言律師可以解釋為什么不允許這樣做?
這是一個簡單的例子:
template <typename...Ts>
using pack = void;
template <template <typename> class>
using accept_template = int;
accept_template<pack> value = 0;
當然,我不會在這個確切的場景中使用它。 它將用於將模板傳遞給另一個模板,該模板將以某種方式使用傳遞的模板。 在我鏈接的答案中,我已經說明了一種解決方法,但我仍然認為這是一個缺陷。
P0522導致此限制被放寬, P0522引入了新規則來處理模板模板參數與模板模板參數的匹配方式。 結果,從論文:
template<class T, class U = T> class B { /* ... */ };
template <class ... Types> class C { /* ... */ };
template<template<class> class P> class X { /* ... */ };
X<B> xb; // OK, was ill-formed:
// default arguments for the parameters of a template argument are ignored
X<C> xc; // OK, was ill-formed:
// a template parameter pack does not match a template parameter
您的示例無法在C ++ 14中編譯,但將在C ++中編譯17。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.