/*!
* \file /utl/core/version.h
* \brief version and cpp version checks
*
* Copyright (C) 2018 Christos Choutouridis
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
*/
#ifndef __utl_core_version_h__
#define __utl_core_version_h__
//!\defgroup version version
//! Definitions of the utl version
//!@{
//! utl version
#define UTL_VERSION "0.0.1"
#define UTL_VERSION_MAJOR 0
#define UTL_VERSION_MINOR 0
#define UTL_VERSION_PATCH 1
#define UTL_VERSION_VALUE ( (UTL_VERSION_MAJOR * 10000) \
+ (UTL_VERSION_MINOR * 100) \
+ UTL_VERSION_PATCH)
//! C++ versions
#define CXX_VER __cplusplus
#define CXX_VER_STD_11 201103L
#define CXX_VER_STD_14 201402L
#define CXX_VER_STD_17 201703L
//#include
//! Check for variable templates
#ifndef CXX_VARIABLE_TEMPLATES
#ifdef __cpp_variable_templates
#define CXX_VARIABLE_TEMPLATES __cpp_variable_templates
#else
#define CXX_VARIABLE_TEMPLATES (CXX_VER >= CXX_VER_STD_14)
#endif
#endif
//! Check integer sequence
#ifndef CXX_INTEGER_SEQUENCE
#ifdef __cpp_lib_integer_sequence
#define CXX_INTEGER_SEQUENCE __cpp_lib_integer_sequence
#else
#define CXX_INTEGER_SEQUENCE (CXX_VER >= CXX_VER_STD_14)
#endif
#endif
//! Check concepts
#ifndef CXX_CONCEPTS
#ifdef __cpp_concepts
#define CXX_CONCEPTS __cpp_concepts
#else
#define CXX_CONCEPTS 0
#endif
#endif
//! Check for inline variables
#ifndef CXX_INLINE_VARIABLES
#ifdef __cpp_inline_variables
#define CXX_INLINE_VARIABLES __cpp_inline_variables
#else
#define CXX_INLINE_VARIABLES (CXX_VER >= CXX_VER_STD_17)
#endif
#endif
#ifndef CXX_FOLD_EXPRESSIONS
#ifdef __cpp_fold_expressions
#define CXX_FOLD_EXPRESSIONS __cpp_fold_expressions
#else
#define CXX_FOLD_EXPRESSIONS (CXX_VER >= CXX_VER_STD_17)
#endif
#endif
/*
* Workaround inspection
*/
#if defined(__GNUC__) && (__GNUC__ < 5)
// https://wg21.link/cwg1558
#define UTL_WORKAROUND_CWG_1558
#endif
//! Base library requirement
#if __cplusplus < CXX_VER_STD_11
#error "uTL requires C++11"
#endif
//!@}
#endif /* #ifndef __utl_core_version_h__ */