X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5004e62b0038cf93f205c6eacb0d46c17258ce89..e71a2a302d28430dc1bfee906f842f5f3d0fa3ce:/include/xbt/base.h diff --git a/include/xbt/base.h b/include/xbt/base.h index 860fdf007a..a04230bdce 100644 --- a/include/xbt/base.h +++ b/include/xbt/base.h @@ -1,6 +1,6 @@ /* xbt.h - Public interface to the xbt (simgrid's toolbox) */ -/* Copyright (c) 2004-2020. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2004-2021. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -28,14 +28,15 @@ #endif #if defined(__cplusplus) -#if __cplusplus < 201402L -#error C++14 support is needed. Please upgrade your compiler and/or fix your compilation flags. -#endif +#if __cplusplus >= 201103L #define XBT_ATTRIB_NORETURN [[noreturn]] +#endif #if __cplusplus >= 201703L #define XBT_ATTRIB_UNUSED [[maybe_unused]] #endif +#if __cplusplus >= 201402L #define XBT_ATTRIB_DEPRECATED(mesg) [[deprecated(mesg)]] +#endif #elif defined(__STDC_VERSION__) #if __STDC_VERSION__ >= 201112L #define XBT_ATTRIB_NORETURN _Noreturn @@ -53,11 +54,13 @@ #endif #define XBT_ATTRIB_DEPRECATED_v328(mesg) \ - XBT_ATTRIB_DEPRECATED(mesg " (this compatibility wrapper will be dropped in v3.28)") + XBT_ATTRIB_DEPRECATED(mesg " (this compatibility wrapper will be dropped after v3.27)") #define XBT_ATTRIB_DEPRECATED_v329(mesg) \ - XBT_ATTRIB_DEPRECATED(mesg " (this compatibility wrapper will be dropped in v3.29)") + XBT_ATTRIB_DEPRECATED(mesg " (this compatibility wrapper will be dropped after v3.28)") #define XBT_ATTRIB_DEPRECATED_v330(mesg) \ - XBT_ATTRIB_DEPRECATED(mesg " (this compatibility wrapper will be dropped in v3.30)") + XBT_ATTRIB_DEPRECATED(mesg " (this compatibility wrapper will be dropped after v3.29)") +#define XBT_ATTRIB_DEPRECATED_v331(mesg) \ + XBT_ATTRIB_DEPRECATED(mesg " (this compatibility wrapper will be dropped after v3.30)") #if !defined(__APPLE__) # define XBT_ATTRIB_CONSTRUCTOR(prio) __attribute__((__constructor__(prio))) @@ -108,6 +111,40 @@ a16, a15, a14, a13, a12, a11, a10, a9, \ a8, a7, a6, a5, a4, a3, a2, a1, N, ...) N +/* Expands to number of arguments. */ +#define _XBT_COUNT_ARGS(...) _XBT_IF_ONE_ARG_(__VA_ARGS__, \ + 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, \ + 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, \ + 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, \ + 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1) + +/* Expands to list with each argument rendered as string. Add more cases if needed. */ +#define _XBT_STRINGIFY_ARGS(...) _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_02_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_02_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_03_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_03_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_04_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_04_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_05_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_05_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_06_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_06_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_07_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_07_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_08_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_08_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_09_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_09_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_10_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_10_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_11_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_11_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_12_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_12_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_13_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_13_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_14_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_14_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_15_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_15_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_16_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_16_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_17_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_17_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_18_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_18_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_19_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_19_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_20_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_20_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_21_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_21_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_22_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_22_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_23_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_23_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_24_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_24_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_25_, __VA_ARGS__)(__VA_ARGS__) +#define _XBT_STRINGIFY_A_25_(...) error_maximum_size_of_XBT_STRINGIFY_ARGS_reached + /* Handle import/export stuff * * Rationale of XBT_PUBLIC: