Files
2026-03-24 22:22:37 +00:00

77 lines
2.8 KiB
C++
Vendored

/* Zeta API - Z/inspection/C++.h
______ ______________ ___
|__ / | ___|___ ___|/ \
/ /__| __| | | / - \
/______|_____| |__| /__/ \__\
Copyright (C) 2006-2024 Manuel Sainz de Baranda y Goñi.
Released under the terms of the GNU Lesser General Public License v3. */
#ifndef Z_inspection_CPP_H
#define Z_inspection_CPP_H
#include <Z/keys/C++.h>
#include <Z/macros/token.h>
#ifdef __cplusplus
# ifndef Z_CPP
# if __cplusplus >= 202002L
# define Z_CPP Z_CPP20
# elif __cplusplus >= 201703L
# define Z_CPP Z_CPP17
# elif __cplusplus >= 201402L
# define Z_CPP Z_CPP14
# elif __cplusplus >= 201103L
# define Z_CPP Z_CPP11
# elif __cplusplus >= 199711L
# define Z_CPP Z_CPP98
# else
# define Z_CPP Z_CPP1
# endif
# endif
# if Z_CPP == Z_CPP20
# include <Z/inspection/C++/modules/C++20.h>
# define Z_CPP_NAME Z_CPP_NAME_CPP20
# elif Z_CPP == Z_CPP17
# include <Z/inspection/C++/modules/C++17.h>
# define Z_CPP_NAME Z_CPP_NAME_CPP17
# elif Z_CPP == Z_CPP14
# include <Z/inspection/C++/modules/C++14.h>
# define Z_CPP_NAME Z_CPP_NAME_CPP14
# elif Z_CPP == Z_CPP11
# include <Z/inspection/C++/modules/C++11.h>
# define Z_CPP_NAME Z_CPP_NAME_CPP11
# elif Z_CPP == Z_CPP03
# include <Z/inspection/C++/modules/C++03.h>
# define Z_CPP_NAME Z_CPP_NAME_CPP03
# elif Z_CPP == Z_CPP98
# include <Z/inspection/C++/modules/C++98.h>
# define Z_CPP_NAME Z_CPP_NAME_CPP98
# elif Z_CPP == Z_CPP2
# define Z_CPP_NAME Z_CPP_NAME_CPP2
# elif Z_CPP == Z_CPP1
# define Z_CPP_NAME Z_CPP_NAME_CPP1
# else
# error "Invalid Z_CPP key."
# endif
#endif
/* MARK: - Getters */
#define Z_CPP_HAS( FEATURE ) Z_IS_TRUE(Z_CPP_HAS_##FEATURE )
#define Z_CPP_HAS_ATTRIBUTE( ATTRIBUTE ) Z_IS_TRUE(Z_CPP_HAS_ATTRIBUTE_##ATTRIBUTE )
#define Z_CPP_HAS_IDENTIFIER( IDENTIFIER ) Z_IS_TRUE(Z_CPP_HAS_IDENTIFIER_##IDENTIFIER )
#define Z_CPP_HAS_LITERAL( LITERAL ) Z_IS_TRUE(Z_CPP_HAS_LITERAL_##LITERAL )
#define Z_CPP_HAS_OPERATOR( OPERATOR ) Z_IS_TRUE(Z_CPP_HAS_OPERATOR_##OPERATOR )
#define Z_CPP_HAS_OPERATOR_CASE( OPERATOR, CASE ) Z_IS_TRUE(Z_CPP_HAS_OPERATOR_CASE_##OPERATOR##_##CASE )
#define Z_CPP_HAS_PREPROCESSOR_IDENTIFIER(PREPROCESSOR_IDENTIFIER) Z_IS_TRUE(Z_CPP_HAS_PREPROCESSOR_IDENTIFIER_##PREPROCESSOR_IDENTIFIER)
#define Z_CPP_HAS_PREPROCESSOR_OPERATOR( PREPROCESSOR_OPERATOR ) Z_IS_TRUE(Z_CPP_HAS_PREPROCESSOR_OPERATOR_##PREPROCESSOR_OPERATOR )
#define Z_CPP_HAS_SPECIFIER( SPECIFIER ) Z_IS_TRUE(Z_CPP_HAS_SPECIFIER_##SPECIFIER )
#define Z_CPP_HAS_SPECIFIER_CASE( SPECIFIER, CASE ) Z_IS_TRUE(Z_CPP_HAS_SPECIFIER_CASE_##SPECIFIER##_##CASE )
#define Z_CPP_HAS_STORAGE_CLASS( STORAGE_CLASS ) Z_IS_TRUE(Z_CPP_HAS_STORAGE_CLASS_##STORAGE_CLASS )
#define Z_CPP_HAS_TYPE( TYPE ) Z_IS_TRUE(Z_CPP_HAS_TYPE_##TYPE )
#endif /* Z_inspection_CPP_H */