gpt4 book ai didi

c++ - 如果定义了枚举常量,如何静态断言?

转载 作者:行者123 更新时间:2023-12-01 12:32:57 24 4
gpt4 key购买 nike

我有这个 C++14 代码:

#include <type_traits>

struct f1 {
enum struct e { a };
};

struct f2 {
enum struct e {};
};

template <typename T>
struct my_struct {
using e = typename T::e;
my_struct()
: _e{e::a} {} // e::a used here
e _e;
};

int main() {
my_struct<f1> a;
my_struct<f2> b; // compilation fails
}

显然,编译失败,类似 'a' is not a member of 'my_struct<f2>::e' .我真的很想在 my_struct 中添加一些静态断言, 添加自定义错误消息。首先,我可以检查是否 e实际上是一个枚举:
static_assert(std::is_enum<e>::value, "my message");

然后,我应该添加什么来静态断言 e::a被定义为?

最佳答案

与检测任何嵌套声明的方式相同:

template <typename T, typename = void>
struct enum_defines_a : std::false_type {};

template <typename T>
struct enum_defines_a<T, decltype(void(T::a))> : std::is_enum<T> {};

static_assert(enum_defines_a<e>::value, "Enum doesn't define 'a'");

关于c++ - 如果定义了枚举常量,如何静态断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62385878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com