【发布时间】:2016-10-06 02:51:13
【问题描述】:
以下代码来自an answer to another question,它可以工作。我用最新版本的 GCC、Clang、ICC 和 MSVC 对其进行了测试。但是我不明白标准的哪一部分允许这种构造,请您帮忙?
template<class F, class Alloc> class C; //undefined
template<class T, class... Args, class Alloc>
class C<T(Args...), Alloc> {
// implementation
};
C++ 标准对如何在主类模板中使用参数包提供了限制,但我无法弄清楚这些限制如何应用于部分特化。
所以我的问题是:在 C++ 标准中定义的部分模板专业化的上下文中,参数包的放置规则在哪里?
【问题讨论】:
-
您的实际问题是什么?部分专业化如何运作?
-
你的意思是像here?
-
谢谢,这看起来确实是正确的主题。但是它说“如果一个参数是一个包扩展([temp.variadic]),它应该是模板参数列表中的最后一个参数。”这似乎与示例相矛盾,还是我遗漏了什么?
-
@Drealmer
T(Args...)不是包扩展参数。Args...将是一个包扩展参数 -
好的,这开始有意义了,谢谢大家!但是这是否说明了参数包在专业化参数列表中的放置? (因为关于参数列表的部分确实没有问题)