Search code examples
c++deprecatedportability

How can I mark a C++ class method as deprecated?


I have a method in a C++ interface that I want to deprecate, with portable code.

When I Googled for this all I got was a Microsoft specific solution; #pragma deprecated and __declspec(deprecated).

If a general or fully-portable deprecation solution is not available, I will accept as a "second prize solution" one that can be used multiple specific compilers, like MSVC and a GCC.


Solution

  • In C++14, you can mark a function as deprecated using the [[deprecated]] attribute (see section 7.6.5 [dcl.attr.deprecated]).

    The attribute-token deprecated can be used to mark names and entities whose use is still allowed, but is discouraged for some reason.

    For example, the following function foo is deprecated:

    [[deprecated]]
    void foo(int);
    

    It is possible to provide a message that describes why the name or entity was deprecated:

    [[deprecated("Replaced by bar, which has an improved interface")]]
    void foo(int);
    

    The message must be a string literal.

    For further details, see “Marking as deprecated in C++14”.