C++ Logo

sg10

Advanced search

[SG10] __has_cpp_attribute example

From: Jonathan Wakely <cxx_at_[hidden]>
Date: Wed, 12 Oct 2016 11:55:01 +0100
The SD-6 draft has

[3.3.6] Example

This demonstrates a way to use the attribute [[deprecated]] only if it
is available.

#ifdef __has_cpp_attribute
# if __has_cpp_attribute(deprecated)
# define ATTR_DEPRECATED(msg) [[deprecated(msg)]]
# else
# define ATTR_DEPRECATED(msg)
# endif
#endif



This leaves ATTR_DEPRECATED undefined if the compiler doesn't support
the __has_cpp_attribute macro, is that intended? Unless the idea is
that some other method would be used to decide if it's available, it
should be something like:

#ifdef __has_cpp_attribute
# if __has_cpp_attribute(deprecated)
# define ATTR_DEPRECATED(msg) [[deprecated(msg)]]
# endif
#endif
#ifndef ATTR_DEPRECATED(msg)
# define ATTR_DEPRECATED(msg)
#endif

Would it also be useful to mention that the grammar term
"attribute-token" allows scoped attributes, such as foo::bar, so that
non-standard attributes can be tested the same way?

Received on 2016-10-12 12:55:24