c++ - 我可以在这种情况下短路特征吗?
问题描述
考虑以下内容:
#include <type_traits>
template <typename E>
using is_scoped_enum = std::integral_constant<
bool,
std::is_enum_v<E> && !std::is_convertible_v<E, std::underlying_type_t<E>>
>;
template <typename E>
constexpr auto is_scoped_enum_v = is_scoped_enum<E>::value;void foo() {}
class Foo {};
enum Bar {};
enum class Baz {};
//static_assert(!is_scoped_enum_v<Foo>);
static_assert(!is_scoped_enum_v<Bar>);
static_assert(is_scoped_enum_v<Baz>);
注释掉的行中断了构建,因为Foo
它不是枚举,因此没有基础类型。当然,&&
(即使它在一个常量表达式中)并没有缩短对std::underlying_type_t<E>
有效的需求。
我是否需要创建一些标记类型和链接 enable_if 的怪物,或者我是否缺少一些微不足道的修复?
解决方案
推荐阅读
- python - python 正则表达式解析路由输出
- colors - plotly小提琴图的离散颜色序列
- c# - 为 Linux 容器上托管的 kestrel Web 服务器设置应用程序池标识
- apache-spark - AWS Glue - 在 json 文件中具有不同架构的 DynamicFrame
- flutter - Flutter:查看whatsapp上发送的消息?
- javascript - VueFire - 在渲染之前操作 Firestore 数据
- plotly - 绘制直方图标签
- python - 如何从另一个 .py 文件调用模块
- swiftui - 如何让我的 TextField 从 SwiftUI 中的 Top-leading 开始?
- kotlin - 将 Kotlin TornadoFx 构建为 Windows 的 exe