5

的別名模板部分特例是不允許的:別名模板的偏特

例如,試圖勇於創新,產生這種錯誤鐺:

template <typename T> 
using unwrapped_future_t = T; 

template <typename T> 
using unwrapped_future_t<future<T>> = typename future<T>::value_type; 
         ^~~~~~~~~~~ 
> error: partial specialization of alias templates is not permitted 

這是爲什麼不允許?

回答

9

你可以找到的別名模板original proposal答案:

2.2的主要選擇:專業化與拍賣品

的反射和演進工作組經討論後,事實證明,我們必須在兩個互斥模型中進行選擇:

  1. typedef模板本身不是別名;只有typedef模板的(可能是專用的)實例是別名。這個選擇允許我們對typedef模板進行專門化。

  2. typedef模板本身就是一個別名;它不能專業化。這個選擇將允許:在類型定義模板函數參數

    • 扣(見2.4)
    • 一個聲明中使用的typedef模板是一樣的聲明表示不 的typedef模板(見2.5)
    • 的typedef模板匹配模板的模板參數(參見2.6)
+1

就在第二天一句話就是「這提出了期權1,因此有利於專業化......「爲什麼選擇這個選項的答案在哪裏? – Lack

+0

@缺乏我不知道那麼多,但我可以猜測:委員會投票,選項2的多數。 – Morwenn