Loading...
Searching...
No Matches
Go to the documentation of this file.
3#ifndef LIBCOPP_UTILS_FEATURES_H
4#define LIBCOPP_UTILS_FEATURES_H
9#include <libcopp/utils/config/libcopp_build_features.h>
13#if defined(__GCCXML__)
14# define LIBCOPP_MACRO_COMPILER_GCCXML 1
15#elif defined(__clang__)
16# define LIBCOPP_MACRO_COMPILER_CLANG 1
17#elif defined(_MSC_VER)
18# define LIBCOPP_MACRO_COMPILER_MSVC 1
19#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)
20# define LIBCOPP_MACRO_COMPILER_INTELC 1
21#elif defined(__GNUC__)
22# define LIBCOPP_MACRO_COMPILER_GCC 1
23#elif defined(__BORLANDC__)
24# define LIBCOPP_MACRO_COMPILER_BORLANDC 1
29#if (defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)) && \
31# define LIBCOPP_MACRO_PLATFORM_LINUX
32#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
33# define LIBCOPP_MACRO_PLATFORM_BSD
34#elif defined(sun) || defined(__sun)
35# define LIBCOPP_MACRO_PLATFORM_SOLARIS
37# define LIBCOPP_MACRO_PLATFORM_SGI
39# define LIBCOPP_MACRO_PLATFORM_HPUNIX
40#elif defined(__CYGWIN__)
41# define LIBCOPP_MACRO_PLATFORM_CYGWIN
42#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
43# define LIBCOPP_MACRO_PLATFORM_WIN32
45# if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) || defined(_POSIX_SOURCE)
46# define LIBCOPP_MACRO_PLATFORM_UNIX
54#if defined(LIBCOPP_MACRO_COMPILER_MSVC)
55# define LIBCOPP_HAS_ABI_HEADERS 1
56# define LIBCOPP_ABI_PREFIX "libcopp/utils/abi/msvc_prefix.hpp"
57# define LIBCOPP_ABI_SUFFIX "libcopp/utils/abi/msvc_suffix.hpp"
58#elif defined LIBCOPP_MACRO_COMPILER_BORLANDC
59# define LIBCOPP_HAS_ABI_HEADERS 1
60# define LIBCOPP_ABI_PREFIX "libcopp/utils/abi/borland_prefix.hpp"
61# define LIBCOPP_ABI_SUFFIX "libcopp/utils/abi/borland_suffix.hpp"
67#if defined(LIBCOPP_MACRO_USE_SEGMENTED_STACKS)
68# if !((defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ > 3 && __GNUC_MINOR__ > 6))) || \
69 (defined(__clang__) && __clang_major__ > 2 && __clang_minor__ > 3))
70# error "compiler does not support segmented_stack stacks"
72# define LIBCOPP_MACRO_SEGMENTED_STACK_NUMBER 10
75#ifndef LIBCOPP_MACRO_CPP_STD
76# if defined(__cplusplus) && __cplusplus >= 201103L
77# define LIBCOPP_MACRO_CPP_STD 201103L
78# define LIBCOPP_MACRO_ENABLE_SMART_PTR 1
80# define LIBCOPP_MACRO_CPP_STD 199711L
91#if !defined(COPP_MACRO_RV_REF)
92# define COPP_MACRO_RV_REF &&
96#if !defined(COPP_MACRO_STD_MOVE)
97# define COPP_MACRO_STD_MOVE(x) std::move(x)
101#if !defined(COPP_MACRO_STD_FORWARD)
102# define COPP_MACRO_STD_FORWARD(t, x) std::forward<t>(x)
106#if defined(LIBCOPP_MACRO_COMPILER_GCC)
107# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
108# define LIBCOPP_MACRO_COMPILER_CXX_THREAD_LOCAL 1
110# define LIBCOPP_MACRO_COMPILER_CXX_THREAD_LOCAL 0
112#elif defined(LIBCOPP_MACRO_COMPILER_CLANG)
113# if __has_feature(cxx_thread_local)
114# define LIBCOPP_MACRO_COMPILER_CXX_THREAD_LOCAL 1
116# define LIBCOPP_MACRO_COMPILER_CXX_THREAD_LOCAL 0
118#elif defined(_MSC_VER)
120# define LIBCOPP_MACRO_COMPILER_CXX_THREAD_LOCAL 1
122# define LIBCOPP_MACRO_COMPILER_CXX_THREAD_LOCAL 0
127#if defined(__APPLE__)
128# include <TargetConditionals.h>
130# if TARGET_OS_IPHONE || TARGET_OS_EMBEDDED || TARGET_IPHONE_SIMULATOR
131# define LIBCOPP_MACRO_DISABLE_THREAD_LOCAL_KEYWORK
136#if defined(__ANDROID__)
137# define LIBCOPP_MACRO_DISABLE_THREAD_LOCAL_KEYWORK
140#if !defined(LIBCOPP_MACRO_DISABLE_THREAD_LOCAL_KEYWORK)
141# if defined(LIBCOPP_MACRO_COMPILER_CXX_THREAD_LOCAL) && LIBCOPP_MACRO_COMPILER_CXX_THREAD_LOCAL
142# define LIBCOPP_MACRO_THREAD_LOCAL thread_local
143# elif defined(LIBCOPP_MACRO_COMPILER_GCC) || defined(LIBCOPP_MACRO_COMPILER_CLANG)
144# define LIBCOPP_MACRO_THREAD_LOCAL __thread
145# elif defined(_MSC_VER)
146# define LIBCOPP_MACRO_THREAD_LOCAL __declspec(thread)