/* Zeta API - Z/inspection/C/modules/C99.h
 ______ ____________  ___
|__   /|  ___|__  __|/   \
  /  /_|  __|  |  | /  *  \
 /_____|_____| |__|/__/ \__\
Copyright (C) 2006-2022 Manuel Sainz de Baranda y Goñi.
Released under the terms of the GNU Lesser General Public License v3. */

#ifndef Z_inspection_C_modules_C99_H
#define Z_inspection_C_modules_C99_H

#include <Z/inspection/C/modules/C95.h>

#define Z_LANGUAGE_HAS_C99_COMPOUND_LITERAL				   TRUE
#define Z_LANGUAGE_HAS_C99_CONVERSION_OF_NON_LVALUE_ARRAY_TO_POINTER	   TRUE
#define Z_LANGUAGE_HAS_C99_CPP_STYLE_COMMENT				   TRUE
#define Z_LANGUAGE_HAS_C99_DESIGNATED_INITIALIZATION			   TRUE
#define Z_LANGUAGE_HAS_C99_EMPTY_MACRO_ARGUMENT				   TRUE
#define Z_LANGUAGE_HAS_C99_EXTENDED_IDENTIFIER				   TRUE
#define Z_LANGUAGE_HAS_C99_FLEXIBLE_ARRAY_MEMBER			   TRUE
#define Z_LANGUAGE_HAS_C99_FOR_WITH_DECLARATION				   TRUE
#define Z_LANGUAGE_HAS_C99_IDEMPOTENT_TYPE_QUALIFIERS			   TRUE
#define Z_LANGUAGE_HAS_C99_MIXED_DECLARATIONS_AND_CODE			   TRUE
#define Z_LANGUAGE_HAS_C99_NON_CONSTANT_INITIALIZATION_FOR_LOCAL_AGGREGATE TRUE
#define Z_LANGUAGE_HAS_C99_PREPROCESSOR_ARITHMETIC_DONE_IN_INTMAX	   TRUE
#define Z_LANGUAGE_HAS_C99_RELIABLE_INTEGER_DIVISION			   TRUE
#define Z_LANGUAGE_HAS_C99_REMOVAL_OF_ILL_FORMED_RETURN			   TRUE
#define Z_LANGUAGE_HAS_C99_REMOVAL_OF_IMPLICIT_FUNCTION_DECLARATION	   TRUE
#define Z_LANGUAGE_HAS_C99_REMOVAL_OF_IMPLICIT_INT			   TRUE
#define Z_LANGUAGE_HAS_C99_STATIC_IN_ARRAY_PARAMETER_DECLARATION	   TRUE
#define Z_LANGUAGE_HAS_C99_TRAILING_COMMA_ALLOWED_IN_ENUMERATION	   TRUE
#define Z_LANGUAGE_HAS_C99_TYPE_QUALIFIERS_IN_ARRAY_PARAMETER_DECLARATION  TRUE
#define Z_LANGUAGE_HAS_C99_UNIVERSAL_CHARACTER_NAME			   TRUE
#define Z_LANGUAGE_HAS_C99_VARIADIC_MACRO				   TRUE
#define Z_LANGUAGE_HAS_C99_VLA						   TRUE
#define Z_LANGUAGE_HAS_C99_IDENTIFIER_FUNC				   TRUE
#define Z_LANGUAGE_HAS_C99_LITERAL_HEXADECIMAL_FLOATING_POINT		   TRUE
#define Z_LANGUAGE_HAS_C99_PREPROCESSOR_OPERATOR_PRAGMA			   TRUE
#define Z_LANGUAGE_HAS_C99_SPECIFIER_INLINE				   TRUE
#define Z_LANGUAGE_HAS_C99_STD_PRAGMA_CX_LIMITED_RANGE			   TRUE
#define Z_LANGUAGE_HAS_C99_STD_PRAGMA_FENV_ACCESS			   TRUE
#define Z_LANGUAGE_HAS_C99_STD_PRAGMA_FP_CONTRACT			   TRUE
#define Z_LANGUAGE_HAS_C99_TYPE_BOOL					   TRUE
#define Z_LANGUAGE_HAS_C99_TYPE_LONG_LONG				   TRUE
#define Z_LANGUAGE_HAS_C99_TYPE_QUALIFIER_RESTRICT			   TRUE

#if defined(__STDC_IEC_559_COMPLEX__) && __STDC_IEC_559_COMPLEX__ == 1
#	define Z_LANGUAGE_HAS_C99_TYPE_DOUBLE_COMPLEX	   TRUE
#	define Z_LANGUAGE_HAS_C99_TYPE_FLOAT_COMPLEX	   TRUE
#	define Z_LANGUAGE_HAS_C99_TYPE_LONG_DOUBLE_COMPLEX TRUE
#	define Z_LANGUAGE_HAS_C99_TYPE_MODIFIER_COMPLEX	   TRUE

#	ifdef _Imaginary_I
#		define Z_LANGUAGE_HAS_C99_TYPE_DOUBLE_IMAGINARY	     TRUE
#		define Z_LANGUAGE_HAS_C99_TYPE_FLOAT_IMAGINARY	     TRUE
#		define Z_LANGUAGE_HAS_C99_TYPE_LONG_DOUBLE_IMAGINARY TRUE
#		define Z_LANGUAGE_HAS_C99_TYPE_MODIFIER_IMAGINARY    TRUE
#	endif
#endif

#endif /* Z_inspection_C_modules_C99_H */
