我不止一次(甚至在 SO 上)看到过这样的代码:
template<typename U, typename... G, typename T = Traits<U>>
struct {
static_assert(sizeof...(G) == 0, "!");
// ...
};
Or this:
template<typename T, typename... G, typename = std::enable_if_t<condition<T>>
void func(T &&t) {
static_assert(sizeof...(G) == 0, "!");
// ....
}
目的是避免用户通过执行以下操作来违反游戏规则:
template<typename T, typename = std::enable_if_t<std::is_same<T, int>>
void func(T &&t) {
// ....
}
// ...
func<int&, void>(my_int);
使用保护参数包时,无法覆盖默认值。
另一方面,对规模的检查避免了无用参数对专业化的污染。
无论如何,因为[温度资源/8],我们有:
如果出现以下情况,则程序格式错误,无需诊断:
[...]
- 可变参数模板的每个有效特化都需要一个空模板参数包,或者
[...]
那么,包含上述代码片段的程序是否格式错误?
这个“技巧”会导致程序格式错误,无需诊断。
该标准在您引用的部分中清楚地说明了这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)