C++ Logo

SG10

Advanced search

Subject: [SG10] __has_cpp_attribute example
From: Jonathan Wakely (cxx_at_[hidden])
Date: 2016-10-12 05:55:01


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?


SG10 list run by sg10-owner@lists.isocpp.org