【问题标题】:Is it possible to mark a enum class member as deprecated? [duplicate]是否可以将枚举类成员标记为已弃用? [复制]
【发布时间】:2023-04-10 16:10:01
【问题描述】:

我已经养成在 C++ 中使用新枚举类(或强枚举)的习惯。现在,我需要弃用一个成员。

但是,如以下问题中所述,标准枚举弃用语法无法编译。 c++ mark enum value as deprecated?

这是我的期望:

enum class MyEnum {
    ORIGINAL [[deprecated("Use `PRIMARY` instead.")]] = 1,
    PRIMARY = 1,
    SECONDARY = 2,
    THIRD = 3
};

结果:

...: error: expected '}' before '[' token
     ORIGINAL [[deprecated]] = 1,
              ^

乍一看,我发现此语法适用于enum MyEnum ...,而不是enum class MyEnum ...。

我似乎在 CPP Reference 上也找不到任何关于它的信息: https://en.cppreference.com/w/cpp/language/attributes/deprecated

我是否遗漏了什么,或者弃用 enum class 成员的适当方法是什么?

【问题讨论】:

  • 您使用的是正确版本的 C++ 吗?这似乎只是自 C++14 以来的标准。如果您使用的是 C++11,它将无法正常工作。
  • 谢谢,这就是答案。开发工具有它自己的工具链,它引入了旧版本的编译器。它没有使用我期望的编译器。

标签: c++ deprecated enum-class


【解决方案1】:

感谢@Chipster 的指点!事实证明我使用的开发工具有它自己的工具链和编译器版本,它比较旧。

我的标准工具链是最新的,但没有被调用。

我能够识别此购买打印__cplusplus 的值。它是一个 ISO 样式日期的整数值(在我的例子中是 201103),代表 cpp 标准版本。这还允许在启用和禁用功能时对版本进行 LT/GT 比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 2012-02-12
    • 2012-03-14
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    相关资源
    最近更新 更多