1#ifndef RBIMPL_HAS_CPP_ATTRIBUTE_H
2#define RBIMPL_HAS_CPP_ATTRIBUTE_H
28#if RBIMPL_COMPILER_IS(SunPro)
35# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) 0
37#elif defined(__has_cpp_attribute)
38# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) __has_cpp_attribute(_)
40#elif RBIMPL_COMPILER_IS(MSVC)
45# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) RBIMPL_TOKEN_PASTE(RBIMPL_HAS_CPP_ATTRIBUTE_, _)
46# define RBIMPL_HAS_CPP_ATTRIBUTE_noreturn 200809 * RBIMPL_COMPILER_SINCE(MSVC, 19, 00, 0)
47# define RBIMPL_HAS_CPP_ATTRIBUTE_carries_dependency 200809 * RBIMPL_COMPILER_SINCE(MSVC, 19, 00, 0)
48# define RBIMPL_HAS_CPP_ATTRIBUTE_deprecated 201309 * RBIMPL_COMPILER_SINCE(MSVC, 19, 10, 0)
49# define RBIMPL_HAS_CPP_ATTRIBUTE_fallthrough 201603 * RBIMPL_COMPILER_SINCE(MSVC, 19, 10, 0)
50# define RBIMPL_HAS_CPP_ATTRIBUTE_maybe_unused 201603 * RBIMPL_COMPILER_SINCE(MSVC, 19, 11, 0)
51# define RBIMPL_HAS_CPP_ATTRIBUTE_nodiscard 201603 * RBIMPL_COMPILER_SINCE(MSVC, 19, 11, 0)
53#elif RBIMPL_COMPILER_BEFORE(Clang, 3, 6, 0)
57# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) RBIMPL_TOKEN_PASTE(RBIMPL_HAS_CPP_ATTRIBUTE_, _)
58# define RBIMPL_HAS_CPP_ATTRIBUTE_noreturn 200809 * RBIMPL_COMPILER_SINCE(Clang, 3, 3, 0)
59# define RBIMPL_HAS_CPP_ATTRIBUTE_deprecated 201309 * RBIMPL_COMPILER_SINCE(Clang, 3, 4, 0)
61#elif RBIMPL_COMPILER_BEFORE(GCC, 5, 0, 0)
64# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) RBIMPL_TOKEN_PASTE(RBIMPL_HAS_CPP_ATTRIBUTE_, _)
65# define RBIMPL_HAS_CPP_ATTRIBUTE_noreturn 200809 * RBIMPL_COMPILER_SINCE(GCC, 4, 8, 0)
66# define RBIMPL_HAS_CPP_ATTRIBUTE_deprecated 201309 * RBIMPL_COMPILER_SINCE(GCC, 4, 9, 0)
73# define RBIMPL_HAS_CPP_ATTRIBUTE0(_) 0
78#if ! defined(__cplusplus)
80# define RBIMPL_HAS_CPP_ATTRIBUTE(_) 0
83# define RBIMPL_HAS_CPP_ATTRIBUTE(_) \
84 ((RBIMPL_HAS_CPP_ATTRIBUTE0(_) <= __cplusplus) ? RBIMPL_HAS_CPP_ATTRIBUTE0(_) : 0)
Defines RBIMPL_COMPILER_IS.
Defines RBIMPL_COMPILER_SINCE.
Defines RBIMPL_TOKEN_PASTE.