【发布时间】:2019-06-29 17:06:12
【问题描述】:
在定义函数模板中使用的模板参数包是否可以跟在另一个模板参数之后,当该参数仅在定义中给出其所需的默认值时;而不是宣言?考虑以下示例:
template <typename ...Ts, typename T>
auto sz(Ts...);
template <typename ...Ts, typename T = int>
auto sz(Ts...) { return sizeof...(Ts); }
我发现 GCC 和 Clang 在这一点上存在分歧(GCC 给出了编译错误)。
【问题讨论】:
-
根据this code,我已经测试了与您类似的其他三个案例,您的示例是当前 Clang 和 GCC 版本不同的唯一案例。正如下面讨论的答案,我认为 Clang 允许这样做是错误的。不过,我也很想知道:你为什么想要这种特殊的、异国情调的安排?
-
嗨@sigma。这是其他人粗略代码中 SFINAE 选择系统的一部分。我删除了 SFINAE 以制作您在上面看到的 MWE。
标签: c++ c++11 templates variadic-templates