作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
<分区>
在模板中提供 static_assert
通常很有帮助。在根本不应该以某种方式实例化模板的情况下,我经常这样做
template<typename T, typename = void>
struct S
{
static_assert(false, "Unconditional error");
static_assert(sizeof(T) != sizeof(T), "Error on instantiation");
};
template<typename T>
struct S<T, std::enable_if_t<std::is_integral_v<T>>>
{
// ...
};
第一个 static_assert
将立即失败,即使没有 S
的实例化,而第二个将成功,如果没有实例化将导致主模板。
第二个 static_assert
显然是重言式,但它“依赖”于 T
以实现预期效果。但这有保证吗?是否允许编译器评估这些重言式?
我是一名优秀的程序员,十分优秀!