别名模板的部分专业化

Cou*_*per 5 c++ templates partial-specialization template-specialization c++11

不允许使用别名模板的部分特化:

例如,尝试创造性,在clang中产生此错误:

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
Run Code Online (Sandbox Code Playgroud)

为什么不允许这样做?

Mor*_*enn 10

您可以在别名模板的原始提案中找到答案:

2.2主要选择:专业化与其他一切

在讨论了反射器和Evolution WG后,我们发现我们必须在两个相互排斥的模型之间进行选择:

  1. typedef模板本身不是别名; 只有typedef模板的(可能是专用的)实例化才是别名.这个选择允许我们对typedef模板进行专门化.

  2. typedef模板本身就是一个别名; 它不能专业化.这个选择将允许:

    • 对typedef模板函数参数的推论(见2.4)
    • 使用typedef模板表示的声明与不带typedef模板的声明相同(参见2.5)
    • typedef模板以匹配模板模板参数(参见2.6)

  • 下一句话是"本文提出了选项1,因此有利于专业化......"为什么选择这个选项的答案在哪里? (2认同)