8#ifndef INCLUDED_BSLS_LIBRARYFEATURES
9#define INCLUDED_BSLS_LIBRARYFEATURES
2348#include <bsls_compilerfeatures.h>
2356#define BSLS_LIBRARYFEATURES_DETECTION_IN_PROGRESS
2366#ifdef BSLS_COMPILERFEATURES_SUPPORT_HAS_INCLUDE
2376# if defined(BSLS_PLATFORM_CMP_CLANG)
2377# if __has_include(<bits/c++config.h>)
2378# define BSLS_LIBRARYFEATURES_SUSPECT_CLANG_WITH_GLIBCPP 1
2382# ifdef BSLS_PLATFORM_CMP_MSVC
2383# if !__has_include(<yvals.h>)
2384# error Standard library implementation detection is broken.
2394# elif defined(BSLS_PLATFORM_CMP_GNU) || \
2395 defined(BSLS_LIBRARYFEATURES_SUSPECT_CLANG_WITH_GLIBCPP)
2396# if !__has_include(<bits/c++config.h>)
2397# error Standard library implementation detection is broken.
2407# elif defined(BSLS_PLATFORM_CMP_SUN)
2408# if !__has_include(<valarray>)
2409# error Standard library implementation detection has failed.
2419# elif BSLS_COMPILERFEATURES_CPLUSPLUS >= 202002L
2420# if !__has_include(<version>)
2421# error Standard library implementation detection is broken.
2435# if !__has_include(<ciso646>)
2436# error Standard library implementation detection is broken.
2455#ifdef BSLS_PLATFORM_CMP_MSVC
2457#elif defined(BSLS_PLATFORM_CMP_GNU) || \
2458 defined(BSLS_LIBRARYFEATURES_SUSPECT_CLANG_WITH_GLIBCPP)
2460# if defined(BSLS_LIBRARYFEATURES_SUSPECT_CLANG_WITH_GLIBCPP)
2462# undef BSLS_LIBRARYFEATURES_SUSPECT_CLANG_WITH_GLIBCPP
2464#elif defined(BSLS_PLATFORM_CMP_SUN)
2482#if defined (__GLIBCPP__) || defined(__GLIBCXX__)
2483# define BSLS_LIBRARYFEATURES_STDCPP_GNU 1
2484#elif defined(_CPPLIB_VER) || (defined(_YVALS) && !defined(__IBMCPP__))
2485# define BSLS_LIBRARYFEATURES_STDCPP_MSVC 1
2486#elif defined(_LIBCPP_VERSION)
2487# define BSLS_LIBRARYFEATURES_STDCPP_LLVM 1
2488#elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
2489# define BSLS_LIBRARYFEATURES_STDCPP_LIBCSTD 1
2490#elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
2491# define BSLS_LIBRARYFEATURES_STDCPP_STLPORT 1
2492#elif defined(__IBMCPP__)
2493# define BSLS_LIBRARYFEATURES_STDCPP_IBM 1
2494#elif defined(__INTELLISENSE__)
2495# define BSLS_LIBRARYFEATURES_STDCPP_INTELLISENSE 1
2497# error Could not determine standard library platform.
2501#if defined(__apple_build_version__) && (__APPLE_CC__ >= 6000)
2523# if !defined(BSLS_LIBRARYFEATURES_STDCPP_LLVM)
2524# error Apple Clang is configured with a non-standard library
2529#undef BSLS_LIBRARYFEATURES_DETECTION_IN_PROGRESS
2547#if defined(BSLS_COMPILERFEATURES_SUPPORT_HAS_INCLUDE)
2548# if __has_include(<version>)
2552# define BSLS_LIBRARYFEATURES_HAS_CPP20_VERSION 1
2562#if BSLS_LIBRARYFEATURES_STDCPP_GNU
2564# if BSLS_COMPILERFEATURES_CPLUSPLUS >= 202002L
2565# if _GLIBCXX_RELEASE >= 11
2566# define BSLS_LIBRARYFEATURES_HAS_CPP20_BASELINE_LIBRARY 1
2571# if BSLS_COMPILERFEATURES_CPLUSPLUS >= 202100L
2572# if _GLIBCXX_RELEASE >= 13
2573# define BSLS_LIBRARYFEATURES_HAS_CPP23_BASELINE_LIBRARY 1
2577#elif defined(BSLS_LIBRARYFEATURES_STDCPP_LLVM)
2579# if BSLS_COMPILERFEATURES_CPLUSPLUS >= 202002L
2580# if _LIBCPP_VERSION >= 150000
2581# define BSLS_LIBRARYFEATURES_HAS_CPP20_BASELINE_LIBRARY 1
2586# if BSLS_COMPILERFEATURES_CPLUSPLUS >= 202302L
2587# if _LIBCPP_VERSION >= 180000
2588# define BSLS_LIBRARYFEATURES_HAS_CPP23_BASELINE_LIBRARY 1
2592#elif defined(BSLS_PLATFORM_CMP_MSVC)
2593# if BSLS_COMPILERFEATURES_CPLUSPLUS >= 202002L
2595# if BSLS_PLATFORM_CMP_VERSION >= 1930
2596# define BSLS_LIBRARYFEATURES_HAS_CPP20_BASELINE_LIBRARY 1
2603# if BSLS_COMPILERFEATURES_CPLUSPLUS > 202002L
2605# if BSLS_PLATFORM_CMP_VERSION >= 1936
2606# define BSLS_LIBRARYFEATURES_HAS_CPP23_BASELINE_LIBRARY 1
2623#define BSLS_LIBRARYFEATURES_HAS_C90_GETS 1
2628#define BSLS_LIBRARYFEATURES_HAS_CPP98_AUTO_PTR 1
2630#if BSLS_COMPILERFEATURES_CPLUSPLUS < 202002L
2633# define BSLS_LIBRARYFEATURES_HAS_CPP98_BINDERS_API 1
2636#if BSLS_COMPILERFEATURES_CPLUSPLUS >= 201703L
2639# define BSLS_LIBRARYFEATURES_HAS_CPP17_DEPRECATED_REMOVED 1
2642#if BSLS_COMPILERFEATURES_CPLUSPLUS >= 202002L
2645# define BSLS_LIBRARYFEATURES_HAS_CPP20_DEPRECATED_REMOVED 1
2659#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_BASELINE_LIBRARY)
2664# if defined(__cpp_lib_atomic_flag_test) && \
2665 __cpp_lib_atomic_flag_test >= 201907L && \
2666 !defined(BSLS_LIBRARYFEATURES_STDCPP_GNU)
2667# define BSLS_LIBRARYFEATURES_HAS_CPP20_ATOMIC_FLAG_TEST_FREE_FUNCTIONS 1
2670# if defined(__cpp_lib_atomic_lock_free_type_aliases) && \
2671 __cpp_lib_atomic_lock_free_type_aliases >= 201907L
2672# define BSLS_LIBRARYFEATURES_HAS_CPP20_ATOMIC_LOCK_FREE_TYPE_ALIASES 1
2675# if defined(__cpp_lib_atomic_ref) && \
2676 __cpp_lib_atomic_ref >= 201806L
2677# define BSLS_LIBRARYFEATURES_HAS_CPP20_ATOMIC_REF 1
2680# if defined(__cpp_lib_atomic_wait) && __cpp_lib_atomic_wait >= 201907L && \
2681 !defined(BSLS_LIBRARYFEATURES_STDCPP_GNU)
2682# define BSLS_LIBRARYFEATURES_HAS_CPP20_ATOMIC_WAIT_FREE_FUNCTIONS 1
2685# if defined(__cpp_lib_chrono) && __cpp_lib_chrono >= 201907L
2686# define BSLS_LIBRARYFEATURES_HAS_CPP20_CALENDAR 1
2688# if !defined(BSLS_LIBRARYFEATURES_STDCPP_GNU) || _GLIBCXX_USE_CXX11_ABI \
2689 || !_GLIBCXX_USE_DUAL_ABI
2692# define BSLS_LIBRARYFEATURES_HAS_CPP20_TIMEZONE 1
2701# if defined(__cpp_lib_concepts) && __cpp_lib_concepts >= 202002L
2702# define BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS 1
2720# if (defined(__cpp_lib_format) && __cpp_lib_format >= 202110L) || \
2721 (defined(BSLS_LIBRARYFEATURES_STDCPP_GNU) && _GLIBCXX_RELEASE >= 13) || \
2722 (defined(BSLS_LIBRARYFEATURES_STDCPP_LLVM) && _LIBCPP_VERSION >= 210100L)
2723# define BSLS_LIBRARYFEATURES_HAS_CPP20_FORMAT 1
2731# if (defined(BSLS_PLATFORM_CMP_CLANG) && BSLS_PLATFORM_CMP_VERSION < 170000L)
2732# undef BSLS_LIBRARYFEATURES_HAS_CPP20_FORMAT
2738# if defined(__cpp_lib_is_layout_compatible) && \
2739 __cpp_lib_is_layout_compatible >= 201907L
2740# define BSLS_LIBRARYFEATURES_HAS_CPP20_IS_CORRESPONDING_MEMBER 1
2741# define BSLS_LIBRARYFEATURES_HAS_CPP20_IS_LAYOUT_COMPATIBLE 1
2744# if defined(__cpp_lib_is_pointer_interconvertible) && \
2745 __cpp_lib_is_pointer_interconvertible >= 201907L
2746# define BSLS_LIBRARYFEATURES_HAS_CPP20_IS_POINTER_INTERCONVERTIBLE 1
2749# if defined(__cpp_lib_jthread) && __cpp_lib_jthread >= 201911L
2750# define BSLS_LIBRARYFEATURES_HAS_CPP20_JTHREAD 1
2753# if (defined(__cpp_lib_smart_ptr_for_overwrite) && \
2754 __cpp_lib_smart_ptr_for_overwrite >= 202002L) || \
2755 (defined(BSLS_LIBRARYFEATURES_STDCPP_GNU) && \
2756 (_GLIBCXX_RELEASE == 11 || _GLIBCXX_RELEASE == 12))
2758# define BSLS_LIBRARYFEATURES_HAS_CPP20_MAKE_UNIQUE_FOR_OVERWRITE 1
2761# if defined(__cpp_lib_ranges) && __cpp_lib_ranges >= 202110L && \
2762 !(defined(BSLS_PLATFORM_CMP_CLANG) && \
2763 BSLS_PLATFORM_CMP_VERSION < 160000 && \
2764 defined(BSLS_LIBRARYFEATURES_STDCPP_GNU))
2767# define BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES 1
2770# if defined(__cpp_lib_source_location) && \
2771 __cpp_lib_source_location >= 201907L
2772# define BSLS_LIBRARYFEATURES_HAS_CPP20_SOURCE_LOCATION 1
2775# if defined(__cpp_lib_syncbuf) && __cpp_lib_syncbuf >= 201803L
2776# define BSLS_LIBRARYFEATURES_HAS_CPP20_SYNCSTREAM 1
2779# if defined(__cpp_lib_to_array) && __cpp_lib_to_array >= 201907L
2780# define BSLS_LIBRARYFEATURES_HAS_CPP20_TO_ARRAY 1
2784#if defined(BSLS_LIBRARYFEATURES_HAS_CPP23_BASELINE_LIBRARY)
2790# if defined(__cpp_lib_allocate_at_least) && \
2791 __cpp_lib_allocate_at_least >= 202302L
2792# define BSLS_LIBRARYFEATURES_HAS_CPP23_ALLOCATE_AT_LEAST 1
2795# if defined(__cpp_lib_bind_back) && __cpp_lib_bind_back >= 202202L
2796# define BSLS_LIBRARYFEATURES_HAS_CPP23_BIND_BACK 1
2799# if defined(__cpp_lib_constexpr_charconv) && \
2800 __cpp_lib_constexpr_charconv >= 202207L
2801# define BSLS_LIBRARYFEATURES_HAS_CPP23_INT_CHARCONV 1
2804# if defined(__cpp_lib_containers_ranges) && \
2805 __cpp_lib_containers_ranges >= 202202L
2806# define BSLS_LIBRARYFEATURES_HAS_CPP23_CONTAINERS_RANGES 1
2809# if defined(__cpp_lib_forward_like) && __cpp_lib_forward_like >= 202207L
2810# define BSLS_LIBRARYFEATURES_HAS_CPP23_FORWARD_LIKE 1
2813# if defined(__cpp_lib_generator) && __cpp_lib_generator >= 202207L
2814# define BSLS_LIBRARYFEATURES_HAS_CPP23_GENERATOR 1
2817# if defined(__cpp_lib_is_implicit_lifetime) && \
2818 __cpp_lib_is_implicit_lifetime >= 202302L
2819# define BSLS_LIBRARYFEATURES_HAS_CPP23_IS_IMPLICIT_LIFETIME 1
2822# if defined(__cpp_lib_mdspan) && __cpp_lib_mdspan >= 202207L
2823# if !__has_include(<mdspan>)
2824# error Platform claims to support <mdspan> but the header is not found
2826# define BSLS_LIBRARYFEATURES_HAS_CPP23_MDSPAN 1
2829# if defined(__cpp_lib_out_ptr) && __cpp_lib_out_ptr >= 202106L
2830# define BSLS_LIBRARYFEATURES_HAS_CPP23_OUT_PTR 1
2833# if defined(__cpp_lib_print) && __cpp_lib_print >= 202403L
2834# define BSLS_LIBRARYFEATURES_HAS_CPP23_PRINT 1
2837# if defined(__cpp_lib_ranges) && __cpp_lib_ranges >= 202202L
2838# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGE_ADAPTOR_CLOSURE 1
2844# if __cpp_lib_format_ranges >= 202207L && \
2845 defined(BSLS_LIBRARYFEATURES_HAS_CPP20_FORMAT)
2846# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGE_FORMAT 1
2849# if defined(__cpp_lib_ranges_as_const) && __cpp_lib_ranges_as_const >= 202207L
2850# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_AS_CONST 1
2853# if defined(__cpp_lib_ranges_cartesian_product) && \
2854 __cpp_lib_ranges_cartesian_product >= 202207L
2855# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_CARTESIAN_PRODUCT 1
2858# if defined(__cpp_lib_ranges_chunk) && __cpp_lib_ranges_chunk >= 202202L
2859# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_CHUNK 1
2862# if defined(__cpp_lib_ranges_contains) && __cpp_lib_ranges_contains >= 202207L
2863# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_CONTAINS 1
2866# if defined(__cpp_lib_ranges_enumerate) && \
2867 __cpp_lib_ranges_enumerate >= 202302L
2868# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_ENUMERATE 1
2871# if defined(__cpp_lib_ranges_find_last) && \
2872 __cpp_lib_ranges_find_last >= 202207L
2873# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_FIND_LAST 1
2876# if defined(__cpp_lib_ranges_fold) && __cpp_lib_ranges_fold >= 202207L
2877# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_FOLD 1
2880# if defined(__cpp_lib_ranges_iota) && __cpp_lib_ranges_iota >= 202202L && \
2881 !(defined(BSLS_LIBRARYFEATURES_STDCPP_GNU) && _GLIBCXX_RELEASE < 14)
2884# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_IOTA 1
2887# if defined(__cpp_lib_ranges_join_with) && \
2888 __cpp_lib_ranges_join_with >= 202202L
2889# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_JOIN_WITH 1
2892# if defined(__cpp_lib_shift) && __cpp_lib_shift >= 202202L
2893# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_SHIFT 1
2896# if defined(__cpp_lib_ranges_slide) && __cpp_lib_ranges_slide >= 202202L
2897# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_SLIDE 1
2900# if defined(__cpp_lib_ranges_starts_ends_with) && \
2901 __cpp_lib_ranges_starts_ends_with >= 202106L
2902# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_STARTS_ENDS_WITH 1
2905# if defined(__cpp_lib_ranges_stride) && __cpp_lib_ranges_stride >= 202202L
2906# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_STRIDE 1
2909# if defined(__cpp_lib_ranges_to_container) && \
2910 __cpp_lib_ranges_to_container >= 202202L
2911# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_TO_CONTAINER 1
2914# if defined(__cpp_lib_ranges_zip) && __cpp_lib_ranges_zip >= 202110L
2915# define BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_ZIP 1
2918# if defined(__cpp_lib_reference_from_temporary) && \
2919 __cpp_lib_reference_from_temporary >= 202202L
2920# define BSLS_LIBRARYFEATURES_HAS_CPP23_REFERENCE_FROM_TEMPORARY 1
2923# if defined(__cpp_lib_spanstream) && __cpp_lib_spanstream >= 202106L
2924# if !__has_include(<spanstream>)
2925# error Platform claims to support <spanstream> but the header is not found
2927# define BSLS_LIBRARYFEATURES_HAS_CPP23_SPANSTREAM 1
2930# if defined(__cpp_lib_stacktrace) && __cpp_lib_stacktrace >= 202011L
2932# ifndef BSLS_LIBRARYFEATURES_STDCPP_GNU
2933# define BSLS_LIBRARYFEATURES_HAS_CPP23_STACKTRACE 1
2937# if defined(__cpp_lib_start_lifetime_as) && \
2938 __cpp_lib_start_lifetime_as >= 202207L
2939# define BSLS_LIBRARYFEATURES_HAS_CPP23_START_LIFETIME_AS 1
2950#if BSLS_LIBRARYFEATURES_STDCPP_GNU && _GLIBCXX_RELEASE >= 7
2971# if _GLIBCXX_USE_CXX11_ABI
2972# define BSLS_LIBRARYFEATURES_HAS_CPP11_SHORT_STRING 1
2977# if _GLIBCXX_USE_C99 == 1
2978# define BSLS_LIBRARYFEATURES_HAS_C99_FP_CLASSIFY 1
2979# if BSLS_COMPILERFEATURES_CPLUSPLUS >= 201103L
2980# define BSLS_LIBRARYFEATURES_HAS_C99_LIBRARY 1
2982# define BSLS_LIBRARYFEATURES_HAS_C99_SNPRINTF 1
2990# if !BSLS_LIBRARYFEATURES_HAS_CPP20_VERSION && __has_include(<atomic>)
3001# if defined(__cpp_lib_atomic_is_always_lock_free)
3002# define BSLS_LIBRARYFEATURES_HAS_CPP17_PRECISE_BITWIDTH_ATOMICS 1
3006# if BSLS_COMPILERFEATURES_CPLUSPLUS >= 201103L
3007# define BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY 1
3008# define BSLS_LIBRARYFEATURES_HAS_CPP11_DYNAMIC_EXCEPTION_SPECS 1
3009# define BSLS_LIBRARYFEATURES_HAS_CPP11_EXCEPTION_HANDLING 1
3010# define BSLS_LIBRARYFEATURES_HAS_CPP11_GARBAGE_COLLECTION_API 1
3011# define BSLS_LIBRARYFEATURES_HAS_CPP11_MISCELLANEOUS_UTILITIES 1
3012# define BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR 1
3013# define BSLS_LIBRARYFEATURES_HAS_CPP11_RANGE_FUNCTIONS 1
3014# define BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE 1
3015# define BSLS_LIBRARYFEATURES_HAS_CPP11_TUPLE 1
3016# define BSLS_LIBRARYFEATURES_HAS_CPP11_UNIQUE_PTR 1
3017# if defined(_GLIBCXX_HAVE_AT_QUICK_EXIT) && \
3018 defined(_GLIBCXX_HAVE_QUICK_EXIT)
3021# define BSLS_LIBRARYFEATURES_HAS_CPP11_PROGRAM_TERMINATION 1
3026# if BSLS_COMPILERFEATURES_CPLUSPLUS > 201103L
3027# define BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY 1
3028# define BSLS_LIBRARYFEATURES_HAS_CPP14_RANGE_FUNCTIONS 1
3034# if BSLS_COMPILERFEATURES_CPLUSPLUS >= 201703L
3035# define BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY 1
3036# define BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_OVERLOAD 1
3037# define BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_FUNCTORS 1
3038# define BSLS_LIBRARYFEATURES_HAS_CPP17_SPECIAL_MATH_FUNCTIONS 1
3039# define BSLS_LIBRARYFEATURES_HAS_CPP17_RANGE_FUNCTIONS 1
3041# ifdef _GLIBCXX_HAVE_ALIGNED_ALLOC
3042# define BSLS_LIBRARYFEATURES_HAS_CPP17_ALIGNED_ALLOC 1
3045# ifdef _GLIBCXX_HAVE_TIMESPEC_GET
3046# define BSLS_LIBRARYFEATURES_HAS_CPP17_TIMESPEC_GET 1
3049# if _GLIBCXX_RELEASE >= 8
3050# define BSLS_LIBRARYFEATURES_HAS_CPP17_INT_CHARCONV 1
3053# if _GLIBCXX_RELEASE >= 9
3054# define BSLS_LIBRARYFEATURES_HAS_CPP17_FILESYSTEM 1
3055# define BSLS_LIBRARYFEATURES_HAS_CPP17_PMR 1
3057# if defined(BSLS_LIBRARYFEATURES_HAS_CPP11_SHORT_STRING)
3060# define BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING 1
3064# if _GLIBCXX_RELEASE >= 12
3067# define BSLS_LIBRARYFEATURES_HAS_CPP17_CHARCONV 1
3071# if _GLIBCXX_USE_DEPRECATED
3074# undef BSLS_LIBRARYFEATURES_HAS_CPP20_DEPRECATED_REMOVED
3075# undef BSLS_LIBRARYFEATURES_HAS_CPP17_DEPRECATED_REMOVED
3085# if defined(BSLS_PLATFORM_CMP_GNU) && BSLS_PLATFORM_CMP_VERSION < 70301
3086# undef BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_OVERLOAD
3087# undef BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_FUNCTORS
3099#elif defined(BSLS_LIBRARYFEATURES_STDCPP_LLVM)
3106# define BSLS_LIBRARYFEATURES_HAS_C99_FP_CLASSIFY 1
3109# if BSLS_COMPILERFEATURES_CPLUSPLUS >= 201103L
3110# define BSLS_LIBRARYFEATURES_HAS_C99_LIBRARY 1
3111# define BSLS_LIBRARYFEATURES_HAS_C99_SNPRINTF 1
3112# define BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY 1
3113# define BSLS_LIBRARYFEATURES_HAS_CPP11_DYNAMIC_EXCEPTION_SPECS 1
3114# define BSLS_LIBRARYFEATURES_HAS_CPP11_EXCEPTION_HANDLING 1
3115# define BSLS_LIBRARYFEATURES_HAS_CPP11_MISCELLANEOUS_UTILITIES 1
3116# define BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR 1
3117# define BSLS_LIBRARYFEATURES_HAS_CPP11_PROGRAM_TERMINATION 1
3118# define BSLS_LIBRARYFEATURES_HAS_CPP11_RANGE_FUNCTIONS 1
3119# define BSLS_LIBRARYFEATURES_HAS_CPP11_SHORT_STRING 1
3120# define BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE 1
3121# define BSLS_LIBRARYFEATURES_HAS_CPP11_TUPLE 1
3122# define BSLS_LIBRARYFEATURES_HAS_CPP11_UNIQUE_PTR 1
3126# if BSLS_COMPILERFEATURES_CPLUSPLUS > 201103L
3127# define BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY 1
3128# define BSLS_LIBRARYFEATURES_HAS_CPP14_RANGE_FUNCTIONS 1
3134# if BSLS_COMPILERFEATURES_CPLUSPLUS >= 201703L
3135# define BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY 1
3136# define BSLS_LIBRARYFEATURES_HAS_CPP17_FILESYSTEM 1
3137# define BSLS_LIBRARYFEATURES_HAS_CPP17_RANGE_FUNCTIONS 1
3138# define BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_OVERLOAD 1
3140# ifdef _LIBCPP_HAS_ALIGNED_ALLOC
3141# define BSLS_LIBRARYFEATURES_HAS_CPP17_ALIGNED_ALLOC 1
3144# ifdef _LIBCPP_HAS_TIMESPEC_GET
3145# define BSLS_LIBRARYFEATURES_HAS_CPP17_TIMESPEC_GET 1
3148# if _LIBCPP_VERSION >= 170000
3149# define BSLS_LIBRARYFEATURES_HAS_CPP17_PMR 1
3150# define BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING 1
3164#elif defined(BSLS_PLATFORM_CMP_MSVC)
3171# define BSLS_LIBRARYFEATURES_HAS_C99_FP_CLASSIFY 1
3172# define BSLS_LIBRARYFEATURES_HAS_C99_LIBRARY 1
3173# define BSLS_LIBRARYFEATURES_HAS_C99_SNPRINTF 1
3174# define BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY 1
3175# define BSLS_LIBRARYFEATURES_HAS_CPP11_DYNAMIC_EXCEPTION_SPECS 1
3176# define BSLS_LIBRARYFEATURES_HAS_CPP11_EXCEPTION_HANDLING 1
3177# define BSLS_LIBRARYFEATURES_HAS_CPP11_GARBAGE_COLLECTION_API 1
3178# define BSLS_LIBRARYFEATURES_HAS_CPP11_MISCELLANEOUS_UTILITIES 1
3179# define BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR 1
3180# define BSLS_LIBRARYFEATURES_HAS_CPP11_PROGRAM_TERMINATION 1
3181# define BSLS_LIBRARYFEATURES_HAS_CPP11_RANGE_FUNCTIONS 1
3182# define BSLS_LIBRARYFEATURES_HAS_CPP11_SHORT_STRING 1
3183# define BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE 1
3184# define BSLS_LIBRARYFEATURES_HAS_CPP11_TUPLE 1
3185# define BSLS_LIBRARYFEATURES_HAS_CPP11_UNIQUE_PTR 1
3186# define BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY 1
3189# define BSLS_LIBRARYFEATURES_HAS_CPP14_RANGE_FUNCTIONS 1
3191# define BSLS_LIBRARYFEATURES_HAS_CPP17_PRECISE_BITWIDTH_ATOMICS 1
3194# if BSLS_COMPILERFEATURES_CPLUSPLUS > 201402L
3198# if BSLS_PLATFORM_CMP_VERSION >= 1910
3199# define BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_OVERLOAD 1
3203# if BSLS_PLATFORM_CMP_VERSION >= 1913
3204# define BSLS_LIBRARYFEATURES_HAS_CPP17_PMR 1
3205# define BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING 1
3206# define BSLS_LIBRARYFEATURES_HAS_CPP17_RANGE_FUNCTIONS 1
3210# if BSLS_PLATFORM_CMP_VERSION >= 1914
3211# define BSLS_LIBRARYFEATURES_HAS_CPP17_INT_CHARCONV 1
3212# define BSLS_LIBRARYFEATURES_HAS_CPP17_FILESYSTEM 1
3213# define BSLS_LIBRARYFEATURES_HAS_CPP17_PARALLEL_ALGORITHMS 1
3217# if BSLS_PLATFORM_CMP_VERSION >= 1915
3226# if BSLS_PLATFORM_CMP_VERSION >= 1920
3227# define BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY 1
3228# define BSLS_LIBRARYFEATURES_HAS_CPP17_CHARCONV 1
3229# define BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_FUNCTORS 1
3230# define BSLS_LIBRARYFEATURES_HAS_CPP17_SPECIAL_MATH_FUNCTIONS 1
3231# define BSLS_LIBRARYFEATURES_HAS_CPP17_TIMESPEC_GET 1
3237# if BSLS_COMPILERFEATURES_CPLUSPLUS >= 202002L
3246# if BSLS_COMPILERFEATURES_CPLUSPLUS > 202002L
3257# undef BSLS_LIBRARYFEATURES_HAS_C90_GETS
3265# if _HAS_AUTO_PTR_ETC
3266# undef BSLS_LIBRARYFEATURES_HAS_CPP17_DEPRECATED_REMOVED
3272# if _HAS_FEATURES_REMOVED_IN_CXX20
3273# undef BSLS_LIBRARYFEATURES_HAS_CPP20_DEPRECATED_REMOVED
3285#elif defined(BSLS_LIBRARYFEATURES_STDCPP_GNU) && \
3286 defined(BSLS_PLATFORM_CMP_GNU)
3288# define BSLS_LIBRARYFEATURES_HAS_C99_FP_CLASSIFY 1
3291# if BSLS_COMPILERFEATURES_CPLUSPLUS >= 201103L
3292# if BSLS_PLATFORM_CMP_VERSION >= 40800
3293# define BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY 1
3294# define BSLS_LIBRARYFEATURES_HAS_CPP11_DYNAMIC_EXCEPTION_SPECS 1
3295# define BSLS_LIBRARYFEATURES_HAS_CPP11_EXCEPTION_HANDLING 1
3296# define BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR 1
3297# define BSLS_LIBRARYFEATURES_HAS_CPP11_RANGE_FUNCTIONS 1
3298# define BSLS_LIBRARYFEATURES_HAS_CPP11_TUPLE 1
3299# define BSLS_LIBRARYFEATURES_HAS_CPP11_UNIQUE_PTR 1
3300# if defined(_GLIBCXX_HAVE_AT_QUICK_EXIT) && \
3301 defined(_GLIBCXX_HAVE_QUICK_EXIT)
3304# define BSLS_LIBRARYFEATURES_HAS_CPP11_PROGRAM_TERMINATION 1
3306# if _GLIBCXX_USE_C99 == 1
3309# define BSLS_LIBRARYFEATURES_HAS_C99_LIBRARY 1
3311# define BSLS_LIBRARYFEATURES_HAS_C99_SNPRINTF 1
3315# if BSLS_PLATFORM_CMP_VERSION >= 50000
3316# define BSLS_LIBRARYFEATURES_HAS_CPP11_MISCELLANEOUS_UTILITIES 1
3317# define BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE 1
3320# if BSLS_PLATFORM_CMP_VERSION >= 60000
3321# define BSLS_LIBRARYFEATURES_HAS_CPP11_GARBAGE_COLLECTION_API 1
3330# if _GLIBCXX_USE_CXX11_ABI
3331# define BSLS_LIBRARYFEATURES_HAS_CPP11_SHORT_STRING 1
3336# if BSLS_COMPILERFEATURES_CPLUSPLUS > 201103L
3337# define BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY 1
3338# define BSLS_LIBRARYFEATURES_HAS_CPP14_RANGE_FUNCTIONS 1
3361#elif defined(BSLS_LIBRARYFEATURES_STDCPP_GNU) && \
3362 defined(BSLS_PLATFORM_CMP_CLANG)
3364# define BSLS_LIBRARYFEATURES_HAS_C99_FP_CLASSIFY 1
3372# if _GLIBCXX_USE_CXX11_ABI
3373# define BSLS_LIBRARYFEATURES_HAS_CPP11_SHORT_STRING 1
3377# if BSLS_COMPILERFEATURES_CPLUSPLUS >= 201103L
3378# define BSLS_LIBRARYFEATURES_HAS_C99_LIBRARY 1
3379# define BSLS_LIBRARYFEATURES_HAS_C99_SNPRINTF 1
3380# define BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY 1
3381# define BSLS_LIBRARYFEATURES_HAS_CPP11_DYNAMIC_EXCEPTION_SPECS 1
3382# define BSLS_LIBRARYFEATURES_HAS_CPP11_EXCEPTION_HANDLING 1
3383# define BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR 1
3384# define BSLS_LIBRARYFEATURES_HAS_CPP11_RANGE_FUNCTIONS 1
3385# define BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE 1
3386# define BSLS_LIBRARYFEATURES_HAS_CPP11_TUPLE 1
3387# define BSLS_LIBRARYFEATURES_HAS_CPP11_UNIQUE_PTR 1
3396# define BSLS_LIBRARYFEATURES_HAS_CPP11_MISCELLANEOUS_UTILITIES 1
3403# if defined(_GLIBCXX_HAVE_AT_QUICK_EXIT) && \
3404 defined(_GLIBCXX_HAVE_QUICK_EXIT)
3405# define BSLS_LIBRARYFEATURES_HAS_CPP11_PROGRAM_TERMINATION 1
3410# if BSLS_COMPILERFEATURES_CPLUSPLUS > 201103L
3411# if BSLS_PLATFORM_CMP_VERSION >= 30400
3412# define BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY 1
3413# define BSLS_LIBRARYFEATURES_HAS_CPP14_RANGE_FUNCTIONS 1
3438#elif defined(BSLS_LIBRARYFEATURES_STDCPP_GNU) \
3439 && defined(BSLS_PLATFORM_CMP_SUN)
3446# if BSLS_COMPILERFEATURES_CPLUSPLUS >= 201103L
3452# if BSLS_PLATFORM_CMP_VERSION >= 0x5130
3453# define BSLS_LIBRARYFEATURES_HAS_C99_FP_CLASSIFY 1
3454# define BSLS_LIBRARYFEATURES_HAS_C99_LIBRARY 1
3455# define BSLS_LIBRARYFEATURES_HAS_C99_SNPRINTF 1
3456# define BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY 1
3457# define BSLS_LIBRARYFEATURES_HAS_CPP11_EXCEPTION_HANDLING 1
3458# define BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR 1
3459# define BSLS_LIBRARYFEATURES_HAS_CPP11_RANGE_FUNCTIONS 1
3460# define BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE 1
3461# define BSLS_LIBRARYFEATURES_HAS_CPP11_TUPLE 1
3462# define BSLS_LIBRARYFEATURES_HAS_CPP11_UNIQUE_PTR 1
3465# if BSLS_PLATFORM_CMP_VERSION >= 0x5140
3466# define BSLS_LIBRARYFEATURES_HAS_CPP11_MISCELLANEOUS_UTILITIES 1
3469# if BSLS_PLATFORM_CMP_VERSION >= 0x5150
3473# undef BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR
3474# undef BSLS_LIBRARYFEATURES_HAS_CPP11_TUPLE
3475# undef BSLS_LIBRARYFEATURES_HAS_CPP11_UNIQUE_PTR
3480# if BSLS_COMPILERFEATURES_CPLUSPLUS > 201103L
3481# if BSLS_PLATFORM_CMP_VERSION >= 0x5140
3482# define BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY 1
3483# define BSLS_LIBRARYFEATURES_HAS_CPP14_RANGE_FUNCTIONS 1
3516#elif defined(BSLS_LIBRARYFEATURES_STDCPP_IBM) \
3517 || defined(BSLS_LIBRARYFEATURES_STDCPP_LIBCSTD) \
3518 || defined(BSLS_LIBRARYFEATURES_STDCPP_STLPORT)
3562#if BSLS_COMPILERFEATURES_CPLUSPLUS > 201103L
3565# undef BSLS_LIBRARYFEATURES_HAS_C90_GETS
3568#if defined(BSLS_LIBRARYFEATURES_HAS_CPP17_DEPRECATED_REMOVED)
3571# undef BSLS_LIBRARYFEATURES_HAS_CPP98_AUTO_PTR
3574#if BSLS_COMPILERFEATURES_CPLUSPLUS > 202002L
3577# undef BSLS_LIBRARYFEATURES_HAS_CPP11_DYNAMIC_EXCEPTION_SPECS
3584# undef BSLS_LIBRARYFEATURES_HAS_CPP11_GARBAGE_COLLECTION_API
3593#if defined(BSLS_LIBRARYFEATURES_HAS_CPP23_INT_CHARCONV) && \
3594 !defined(BSLS_LIBRARYFEATURES_HAS_CPP17_INT_CHARCONV)
3595# undef BSLS_LIBRARYFEATURES_HAS_CPP23_INT_CHARCONV
3605#if BSLS_COMPILERFEATURES_FULL_CPP11
3608# define BSLS_LIBRARYFEATURES_HAS_CPP14_INTEGER_SEQUENCE 1
3620#undef BSLS_LIBRARYFEATURES_FORCE_ABI_ENABLED
3621#if defined(BSLS_LIBRARYFEATURES_FORCE_ABI_CPP11)
3622# ifndef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
3623# error Cannot force C++11 ABI compatibility without at least C++11 support
3625# define BSLS_LIBRARYFEATURES_FORCE_ABI_ENABLED 11
3626# define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME \
3627 bsls_libraryfeatures_forced_CPP11_ABI
3630#if defined(BSLS_LIBRARYFEATURES_FORCE_ABI_CPP17)
3631# ifndef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
3632# error Cannot force C++17 ABI compatibility without at least C++17 support
3634# define BSLS_LIBRARYFEATURES_FORCE_ABI_ENABLED 17
3635# define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME \
3636 bsls_libraryfeatures_forced_CPP17_ABI
3639#if defined(BSLS_LIBRARYFEATURES_FORCE_ABI_CPP20)
3640# ifndef BSLS_LIBRARYFEATURES_HAS_CPP20_BASELINE_LIBRARY
3641# error Cannot force C++20 ABI compatibility without at least C++20 support
3643# define BSLS_LIBRARYFEATURES_FORCE_ABI_ENABLED 20
3644# define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME \
3645 bsls_libraryfeatures_forced_CPP20_ABI
3648#if defined(BSLS_LIBRARYFEATURES_FORCE_ABI_CPP23)
3649# ifndef BSLS_LIBRARYFEATURES_HAS_CPP23_BASELINE_LIBRARY
3650# error Cannot force C++23 ABI compatibility without at least C++23 support
3652# define BSLS_LIBRARYFEATURES_FORCE_ABI_ENABLED 23
3653# define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME \
3654 bsls_libraryfeatures_forced_CPP23_ABI
3661#ifndef BSLS_LIBRARYFEATURES_FORCE_ABI_ENABLED
3665# if defined(BSLS_LIBRARYFEATURES_HAS_CPP23_BASELINE_LIBRARY)
3666# define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME bsls_libraryfeatures_CPP23_ABI
3667# elif defined(BSLS_LIBRARYFEATURES_HAS_CPP20_BASELINE_LIBRARY)
3668# define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME bsls_libraryfeatures_CPP20_ABI
3669# elif defined(BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY)
3670# define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME bsls_libraryfeatures_CPP17_ABI
3671# elif defined(BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY)
3672# define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME bsls_libraryfeatures_CPP14_ABI
3673# elif defined(BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY)
3674# define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME bsls_libraryfeatures_CPP11_ABI
3676# define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME bsls_libraryfeatures_CPP03_ABI
3684 bsls_libraryfeatures_assertion,
3685 BloombergLP::BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME)
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME
Definition bsls_libraryfeatures.h:3668
#define BSLS_LINKCOERCION_FORCE_SYMBOL_DEPENDENCY(type, refName, referredSymbol)
Definition bsls_linkcoercion.h:203