How to mark an Enum member as deprecated in C++

1 Answer

0 votes
#include <iostream>

enum class LogLevel
{
    Debug,
    Info,
    Warn [[deprecated("Use Warning instead")]],
    Warning,
    Error
};

const char* toString(LogLevel level)
{
    switch (level)
    {
        case LogLevel::Debug:   return "Debug";
        case LogLevel::Info:    return "Info";
        case LogLevel::Warn:    return "Warn (deprecated)";
        case LogLevel::Warning: return "Warning";
        case LogLevel::Error:   return "Error";
    }

    return "Unknown";
}

int main()
{
    LogLevel current = LogLevel::Warn;  // Compiler warning here

    std::cout << "Current level: "
              << toString(current)
              << '\n';

    LogLevel recommended = LogLevel::Warning;

    std::cout << "Recommended level: "
              << toString(recommended)
              << '\n';
}


/*
run:

main.cpp: In function ‘const char* toString(LogLevel)’:
main.cpp:18:24: warning: ‘LogLevel::Warn’ is deprecated: Use Warning instead [-Wdeprecated-declarations]
   18 |         case LogLevel::Warn:    return "Warn (deprecated)";
      |                        ^~~~
main.cpp:7:5: note: declared here
    7 |     Warn [[deprecated("Use Warning instead")]],
      |     ^~~~
main.cpp:18:24: warning: ‘LogLevel::Warn’ is deprecated: Use Warning instead [-Wdeprecated-declarations]
   18 |         case LogLevel::Warn:    return "Warn (deprecated)";
      |                        ^~~~
main.cpp:7:5: note: declared here
    7 |     Warn [[deprecated("Use Warning instead")]],
      |     ^~~~
main.cpp: In function ‘int main()’:
main.cpp:28:34: warning: ‘LogLevel::Warn’ is deprecated: Use Warning instead [-Wdeprecated-declarations]
   28 |     LogLevel current = LogLevel::Warn;  // Compiler warning here
      |                                  ^~~~
main.cpp:7:5: note: declared here
    7 |     Warn [[deprecated("Use Warning instead")]],
      |     ^~~~
main.cpp:28:34: warning: ‘LogLevel::Warn’ is deprecated: Use Warning instead [-Wdeprecated-declarations]
   28 |     LogLevel current = LogLevel::Warn;  // Compiler warning here
      |                                  ^~~~
main.cpp:7:5: note: declared here
    7 |     Warn [[deprecated("Use Warning instead")]],
      |     ^~~~
Current level: Warn (deprecated)
Recommended level: Warning

*/

 



answered Oct 3 by avibootz

Related questions

1 answer 159 views
159 views asked Jul 27, 2023 by avibootz
1 answer 229 views
1 answer 257 views
257 views asked Mar 13, 2022 by avibootz
1 answer 229 views
1 answer 217 views
...