8#ifndef INCLUDED_BSLS_LIBRARYFEATURES
9#define INCLUDED_BSLS_LIBRARYFEATURES
1423#include <bsls_compilerfeatures.h>
1431#define BSLS_LIBRARYFEATURES_DETECTION_IN_PROGRESS
1441#ifdef BSLS_COMPILERFEATURES_SUPPORT_HAS_INCLUDE
1451 #if defined(BSLS_PLATFORM_CMP_CLANG)
1452 #if __has_include(<bits/c++config.h>)
1453 #define BSLS_LIBRARYFEATURES_SUSPECT_CLANG_WITH_GLIBCPP 1
1457 #ifdef BSLS_PLATFORM_CMP_MSVC
1458 #if !__has_include(<yvals.h>)
1459 #error Standard library implementation detection is broken.
1469 #elif defined(BSLS_PLATFORM_CMP_GNU) || \
1470 defined(BSLS_LIBRARYFEATURES_SUSPECT_CLANG_WITH_GLIBCPP)
1471 #if !__has_include(<bits/c++config.h>)
1472 #error Standard library implementation detection is broken.
1482 #elif defined(BSLS_PLATFORM_CMP_SUN)
1483 #if !__has_include(<valarray>)
1484 #error Standard library implementation detection has failed.
1494 #elif BSLS_COMPILERFEATURES_CPLUSPLUS >= 202002L
1495 #if !__has_include(<version>)
1496 #error Standard library implementation detection is broken.
1509 #if !__has_include(<ciso646>)
1510 #error Standard library implementation detection is broken.
1529#ifdef BSLS_PLATFORM_CMP_MSVC
1531#elif defined(BSLS_PLATFORM_CMP_GNU) || \
1532 defined(BSLS_LIBRARYFEATURES_SUSPECT_CLANG_WITH_GLIBCPP)
1534 #if defined(BSLS_LIBRARYFEATURES_SUSPECT_CLANG_WITH_GLIBCPP)
1536 #undef BSLS_LIBRARYFEATURES_SUSPECT_CLANG_WITH_GLIBCPP
1538#elif defined(BSLS_PLATFORM_CMP_SUN)
1552#undef BSLS_LIBRARYFEATURES_DETECTION_IN_PROGRESS
1558#if defined (__GLIBCPP__) || defined(__GLIBCXX__)
1559 #define BSLS_LIBRARYFEATURES_STDCPP_GNU 1
1560#elif defined(_CPPLIB_VER) || (defined(_YVALS) && !defined(__IBMCPP__))
1561 #define BSLS_LIBRARYFEATURES_STDCPP_MSVC 1
1562#elif defined(_LIBCPP_VERSION)
1563 #define BSLS_LIBRARYFEATURES_STDCPP_LLVM 1
1564#elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
1565 #define BSLS_LIBRARYFEATURES_STDCPP_LIBCSTD 1
1566#elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
1567 #define BSLS_LIBRARYFEATURES_STDCPP_STLPORT 1
1568#elif defined(__IBMCPP__)
1569 #define BSLS_LIBRARYFEATURES_STDCPP_IBM 1
1570#elif defined(__INTELLISENSE__)
1571 #define BSLS_LIBRARYFEATURES_STDCPP_INTELLISENSE 1
1573 #error Could not determine standard library platform.
1588#define BSLS_LIBRARYFEATURES_HAS_C90_GETS 1
1593#define BSLS_LIBRARYFEATURES_HAS_CPP98_AUTO_PTR 1
1595#if BSLS_COMPILERFEATURES_CPLUSPLUS < 202002L
1598 #define BSLS_LIBRARYFEATURES_HAS_CPP98_BINDERS_API 1
1601#if BSLS_COMPILERFEATURES_CPLUSPLUS >= 201703L
1604 #define BSLS_LIBRARYFEATURES_HAS_CPP17_DEPRECATED_REMOVED 1
1607#if BSLS_COMPILERFEATURES_CPLUSPLUS >= 202002L
1610 #define BSLS_LIBRARYFEATURES_HAS_CPP20_DEPRECATED_REMOVED 1
1617#if defined(BSLS_PLATFORM_CMP_GNU)
1618 #define BSLS_LIBRARYFEATURES_HAS_C99_FP_CLASSIFY 1
1619 #if (__cplusplus >= 201103L) || \
1620 (defined(__GXX_EXPERIMENTAL_CXX0X__) && \
1621 BSLS_PLATFORM_CMP_VERSION >= 40800)
1623 #define BSLS_LIBRARYFEATURES_HAS_C99_LIBRARY 1
1625 #if (__cplusplus >= 201103L) || \
1626 (defined(__GXX_EXPERIMENTAL_CXX0X__) && \
1627 BSLS_PLATFORM_CMP_VERSION >= 40800) || \
1628 (defined(_GLIBCXX_USE_C99) && _GLIBCXX_USE_C99 == 1)
1631 #define BSLS_LIBRARYFEATURES_HAS_C99_SNPRINTF 1
1633 #if defined(__GXX_EXPERIMENTAL_CXX0X__) && (__cplusplus >= 201103L)
1634 #if BSLS_PLATFORM_CMP_VERSION >= 40600
1635 #define BSLS_LIBRARYFEATURES_HAS_CPP11_RANGE_FUNCTIONS 1
1638 #if BSLS_PLATFORM_CMP_VERSION >= 40800
1639 #define BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY 1
1640 #define BSLS_LIBRARYFEATURES_HAS_CPP11_EXCEPTION_HANDLING 1
1641 #define BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR 1
1642 #define BSLS_LIBRARYFEATURES_HAS_CPP11_TUPLE 1
1643 #define BSLS_LIBRARYFEATURES_HAS_CPP11_UNIQUE_PTR 1
1644 #if defined(_GLIBCXX_HAVE_AT_QUICK_EXIT) && \
1645 defined(_GLIBCXX_HAVE_QUICK_EXIT)
1648 #define BSLS_LIBRARYFEATURES_HAS_CPP11_PROGRAM_TERMINATION 1
1652 #if BSLS_PLATFORM_CMP_VERSION >= 50000
1653 #define BSLS_LIBRARYFEATURES_HAS_CPP11_MISCELLANEOUS_UTILITIES 1
1654 #define BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE 1
1657 #if BSLS_PLATFORM_CMP_VERSION >= 60000
1658 #define BSLS_LIBRARYFEATURES_HAS_CPP11_GARBAGE_COLLECTION_API 1
1661 #if __cplusplus > 201103L
1662 #define BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY 1
1663 #define BSLS_LIBRARYFEATURES_HAS_CPP14_RANGE_FUNCTIONS 1
1665 #if __cplusplus > 201402L
1666 #if BSLS_PLATFORM_CMP_VERSION >= 70301
1667 #define BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_OVERLOAD 1
1668 #define BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_FUNCTORS 1
1671 #if __cplusplus >= 201703L
1672 #if BSLS_PLATFORM_CMP_VERSION >= 70000
1673 #define BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY 1
1674 #define BSLS_LIBRARYFEATURES_HAS_CPP17_RANGE_FUNCTIONS 1
1676 #if BSLS_PLATFORM_CMP_VERSION >= 80000
1677 #define BSLS_LIBRARYFEATURES_HAS_CPP17_INT_CHARCONV 1
1679 #if BSLS_PLATFORM_CMP_VERSION >= 90000
1680 #define BSLS_LIBRARYFEATURES_HAS_CPP17_FILESYSTEM 1
1681 #ifdef BSLS_COMPILERFEATURES_SUPPORT_HAS_INCLUDE
1682 #if __has_include(<tbb/blocked-range.h>)
1685 #define BSLS_LIBRARYFEATURES_HAS_CPP17_PARALLEL_ALGORITHMS 1
1689 #if _GLIBCXX_RELEASE >= 9
1690 #define BSLS_LIBRARYFEATURES_HAS_CPP17_PMR 1
1692 #if _GLIBCXX_USE_CXX11_ABI
1694 #define BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING 1
1697 #if BSLS_PLATFORM_CMP_VERSION >= 120000
1699 #define BSLS_LIBRARYFEATURES_HAS_CPP17_CHARCONV 1
1701 #ifdef _GLIBCXX_HAVE_TIMESPEC_GET
1702 #define BSLS_LIBRARYFEATURES_HAS_CPP17_TIMESPEC_GET 1
1704 #ifdef _GLIBCXX_HAVE_ALIGNED_ALLOC
1705 #define BSLS_LIBRARYFEATURES_HAS_CPP17__ALIGNED_ALLOC 1
1707 #define BSLS_LIBRARYFEATURES_HAS_CPP17_SPECIAL_MATH_FUNCTIONS 1
1709 #if __cplusplus >= 202002L
1710 #if BSLS_PLATFORM_CMP_VERSION >= 90000
1711 #define BSLS_LIBRARYFEATURES_HAS_CPP20_VERSION 1
1713 #if BSLS_PLATFORM_CMP_VERSION >= 110100
1714 #define BSLS_LIBRARYFEATURES_HAS_CPP20_BASELINE_LIBRARY 1
1722 #if __has_include(<version>)
1724 #elif __has_include(<atomic>)
1727 #if defined(__cpp_lib_atomic_is_always_lock_free)
1735 #define BSLS_LIBRARYFEATURES_HAS_CPP17_PRECISE_BITWIDTH_ATOMICS 1
1737 #if _GLIBCXX_USE_DEPRECATED
1738 #undef BSLS_LIBRARYFEATURES_HAS_CPP17_DEPRECATED_REMOVED
1739 #undef BSLS_LIBRARYFEATURES_HAS_CPP20_DEPRECATED_REMOVED
1743#if defined(BSLS_PLATFORM_CMP_IBM)
1764#if defined(BSLS_PLATFORM_CMP_SUN)
1765 #if __cplusplus >= 201103L
1771 #if BSLS_PLATFORM_CMP_VERSION >= 0x5130
1772 #define BSLS_LIBRARYFEATURES_HAS_C99_FP_CLASSIFY 1
1773 #define BSLS_LIBRARYFEATURES_HAS_C99_LIBRARY 1
1774 #define BSLS_LIBRARYFEATURES_HAS_C99_SNPRINTF 1
1775 #define BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY 1
1776 #define BSLS_LIBRARYFEATURES_HAS_CPP11_EXCEPTION_HANDLING 1
1777 #define BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR 1
1778 #define BSLS_LIBRARYFEATURES_HAS_CPP11_RANGE_FUNCTIONS 1
1779 #define BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE 1
1780 #define BSLS_LIBRARYFEATURES_HAS_CPP11_TUPLE 1
1781 #define BSLS_LIBRARYFEATURES_HAS_CPP11_UNIQUE_PTR 1
1784 #if BSLS_PLATFORM_CMP_VERSION >= 0x5140
1785 #define BSLS_LIBRARYFEATURES_HAS_CPP11_MISCELLANEOUS_UTILITIES 1
1788 #if BSLS_PLATFORM_CMP_VERSION >= 0x5150
1792 #undef BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR
1793 #undef BSLS_LIBRARYFEATURES_HAS_CPP11_TUPLE
1794 #undef BSLS_LIBRARYFEATURES_HAS_CPP11_UNIQUE_PTR
1797 #if __cplusplus > 201103L
1798 #if BSLS_PLATFORM_CMP_VERSION >= 0x5140
1799 #define BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY 1
1800 #define BSLS_LIBRARYFEATURES_HAS_CPP14_RANGE_FUNCTIONS 1
1811#if defined(BSLS_LIBRARYFEATURES_STDCPP_STLPORT)
1830#if defined(BSLS_PLATFORM_CMP_CLANG)
1832 #define BSLS_LIBRARYFEATURES_HAS_C99_FP_CLASSIFY 1
1834 #if defined(__APPLE_CC__) && (__APPLE_CC__ >= 6000)
1836 #define BSLS_LIBRARYFEATURES_HAS_CPP11_RANGE_FUNCTIONS 1
1839 #if defined(__GXX_EXPERIMENTAL_CXX0X__) || (_LIBCPP_STD_VER >= 11)
1840 #define BSLS_LIBRARYFEATURES_HAS_C99_LIBRARY 1
1841 #define BSLS_LIBRARYFEATURES_HAS_C99_SNPRINTF 1
1844 #if (defined(__GXX_EXPERIMENTAL_CXX0X__) || (_LIBCPP_STD_VER >= 11)) \
1845 && (__cplusplus >= 201103L)
1846 #define BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY 1
1847 #define BSLS_LIBRARYFEATURES_HAS_CPP11_EXCEPTION_HANDLING 1
1848 #define BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR 1
1849 #define BSLS_LIBRARYFEATURES_HAS_CPP11_TUPLE 1
1850 #define BSLS_LIBRARYFEATURES_HAS_CPP11_UNIQUE_PTR 1
1853 #if __cplusplus > 201103L
1854 #define BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY 1
1857 #if __cplusplus >= 201402L
1858 #define BSLS_LIBRARYFEATURES_HAS_CPP14_RANGE_FUNCTIONS 1
1861 #if __cplusplus >= 201703L
1862 #define BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_OVERLOAD 1
1864 #if BSLS_PLATFORM_CMP_VERSION >= 140000
1865 #define BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY 1
1866 #define BSLS_LIBRARYFEATURES_HAS_CPP17_RANGE_FUNCTIONS 1
1867 #define BSLS_LIBRARYFEATURES_HAS_CPP17_FILESYSTEM 1
1877 #if BSLS_COMPILERFEATURES_CPLUSPLUS >= 202002L
1878 #if BSLS_PLATFORM_CMP_VERSION >= 100000
1879 #define BSLS_LIBRARYFEATURES_HAS_CPP20_VERSION 1
1882 #if BSLS_PLATFORM_CMP_VERSION >= 150000
1883 #define BSLS_LIBRARYFEATURES_HAS_CPP20_BASELINE_LIBRARY 1
1887 #elif BSLS_PLATFORM_CMP_VERSION >= 30000
1889 #if defined(__GXX_EXPERIMENTAL_CXX0X__)
1890 #define BSLS_LIBRARYFEATURES_HAS_C99_LIBRARY 1
1891 #define BSLS_LIBRARYFEATURES_HAS_C99_SNPRINTF 1
1894 #if defined(__GXX_EXPERIMENTAL_CXX0X__) && (__cplusplus >= 201103L)
1895 #define BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY 1
1896 #define BSLS_LIBRARYFEATURES_HAS_CPP11_RANGE_FUNCTIONS 1
1897 #define BSLS_LIBRARYFEATURES_HAS_CPP11_EXCEPTION_HANDLING 1
1898 #if __cplusplus >= 201703L
1899 #define BSLS_LIBRARYFEATURES_HAS_CPP17_FILESYSTEM 1
1901 #define BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR 1
1902 #define BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE 1
1903 #define BSLS_LIBRARYFEATURES_HAS_CPP11_TUPLE 1
1904 #define BSLS_LIBRARYFEATURES_HAS_CPP11_UNIQUE_PTR 1
1906 #if defined(_GLIBCXX_HAVE_AT_QUICK_EXIT) && \
1907 defined(_GLIBCXX_HAVE_QUICK_EXIT)
1910 #define BSLS_LIBRARYFEATURES_HAS_CPP11_PROGRAM_TERMINATION 1
1919 #if __has_include(<version>)
1921 #elif __has_include(<atomic>)
1924 #if defined(__cpp_lib_atomic_is_always_lock_free)
1933 #define BSLS_LIBRARYFEATURES_HAS_CPP17_PRECISE_BITWIDTH_ATOMICS 1
1936 #if __cplusplus > 201103L
1937 #if BSLS_PLATFORM_CMP_VERSION >= 30400
1938 #define BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY 1
1939 #define BSLS_LIBRARYFEATURES_HAS_CPP14_RANGE_FUNCTIONS 1
1943 #if __cplusplus >= 201703L
1944 #define BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY 1
1945 #define BSLS_LIBRARYFEATURES_HAS_CPP17_RANGE_FUNCTIONS 1
1946 #if defined(BSLS_LIBRARYFEATURES_STDCPP_GNU)
1947 #define BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_OVERLOAD 1
1948 #define BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_FUNCTORS 1
1950 #if defined(_GLIBCXX_RELEASE) && _GLIBCXX_RELEASE >= 8
1951 #define BSLS_LIBRARYFEATURES_HAS_CPP17_INT_CHARCONV 1
1953 #if defined(_GLIBCXX_RELEASE) && _GLIBCXX_RELEASE >= 12
1955 #define BSLS_LIBRARYFEATURES_HAS_CPP17_CHARCONV 1
1957 #elif defined(BSLS_LIBRARYFEATURES_STDCPP_LLVM)
1958 #define BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_OVERLOAD 1
1959 #ifdef _LIBCPP_HAS_TIMESPEC_GET
1960 #define BSLS_LIBRARYFEATURES_HAS_CPP17_TIMESPEC_GET 1
1962 #ifdef _LIBCPP_HAS_ALIGNED_ALLOC
1963 #define BSLS_LIBRARYFEATURES_HAS_CPP17_ALIGNED_ALLOC 1
1968 #error Unsupported standard library for g++
1974 #if BSLS_COMPILERFEATURES_CPLUSPLUS >= 202002L
1975 #if BSLS_PLATFORM_CMP_VERSION >= 90000
1976 #define BSLS_LIBRARYFEATURES_HAS_CPP20_VERSION 1
1979 #if BSLS_PLATFORM_CMP_VERSION >= 150000
1980 #if defined(BSLS_LIBRARYFEATURES_STDCPP_GNU) && \
1981 defined(_GLIBCXX_RELEASE) && _GLIBCXX_RELEASE >= 11
1982 #define BSLS_LIBRARYFEATURES_HAS_CPP20_BASELINE_LIBRARY 1
1983 #elif defined(BSLS_LIBRARYFEATURES_STDCPP_LLVM) && \
1984 defined(_LIBCPP_VERSION) && _LIBCPP_VERSION >= 150000
1985 #define BSLS_LIBRARYFEATURES_HAS_CPP20_BASELINE_LIBRARY 1
1991 #if BSLS_COMPILERFEATURES_CPLUSPLUS >= 201703L && \
1992 (_GLIBCXX_RELEASE >= 9 || _LIBCPP_VERSION >= 170000)
1993 #define BSLS_LIBRARYFEATURES_HAS_CPP17_PMR 1
1994 #if defined(_GLIBCXX_RELEASE)
1996 #if _GLIBCXX_USE_CXX11_ABI
1998 #define BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING 1
2001 #define BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING 1
2012 #if _GLIBCXX_USE_DEPRECATED
2013 #undef BSLS_LIBRARYFEATURES_HAS_CPP17_DEPRECATED_REMOVED
2014 #undef BSLS_LIBRARYFEATURES_HAS_CPP20_DEPRECATED_REMOVED
2018#if defined(BSLS_PLATFORM_CMP_MSVC)
2025 #define BSLS_LIBRARYFEATURES_HAS_C99_FP_CLASSIFY 1
2026 #define BSLS_LIBRARYFEATURES_HAS_C99_LIBRARY 1
2027 #define BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY 1
2028 #define BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE 1
2029 #define BSLS_LIBRARYFEATURES_HAS_CPP11_MISCELLANEOUS_UTILITIES 1
2030 #define BSLS_LIBRARYFEATURES_HAS_CPP11_RANGE_FUNCTIONS 1
2031 #define BSLS_LIBRARYFEATURES_HAS_CPP14_RANGE_FUNCTIONS 1
2032 #define BSLS_LIBRARYFEATURES_HAS_CPP11_UNIQUE_PTR 1
2033 #define BSLS_LIBRARYFEATURES_HAS_CPP17_PRECISE_BITWIDTH_ATOMICS 1
2034 #define BSLS_LIBRARYFEATURES_HAS_C99_SNPRINTF 1
2035 #define BSLS_LIBRARYFEATURES_HAS_CPP11_EXCEPTION_HANDLING 1
2036 #define BSLS_LIBRARYFEATURES_HAS_CPP11_GARBAGE_COLLECTION_API 1
2037 #define BSLS_LIBRARYFEATURES_HAS_CPP11_PAIR_PIECEWISE_CONSTRUCTOR 1
2038 #define BSLS_LIBRARYFEATURES_HAS_CPP11_PROGRAM_TERMINATION 1
2039 #define BSLS_LIBRARYFEATURES_HAS_CPP11_TUPLE 1
2043 #define BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY 1
2044 #define BSLS_LIBRARYFEATURES_HAS_CPP17_BOOL_CONSTANT 1
2047 #undef BSLS_LIBRARYFEATURES_HAS_C90_GETS
2050 #if BSLS_COMPILERFEATURES_CPLUSPLUS >= 201402L
2055 #if BSLS_PLATFORM_CMP_VERSION >= 1910
2056 #define BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_OVERLOAD 1
2061 #if BSLS_COMPILERFEATURES_CPLUSPLUS > 201402L
2066 #if BSLS_PLATFORM_CMP_VERSION >= 1913
2067 #define BSLS_LIBRARYFEATURES_HAS_CPP17_PMR 1
2068 #define BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING 1
2069 #define BSLS_LIBRARYFEATURES_HAS_CPP17_RANGE_FUNCTIONS 1
2073 #if BSLS_PLATFORM_CMP_VERSION >= 1914
2074 #define BSLS_LIBRARYFEATURES_HAS_CPP17_INT_CHARCONV 1
2075 #define BSLS_LIBRARYFEATURES_HAS_CPP17_FILESYSTEM 1
2076 #define BSLS_LIBRARYFEATURES_HAS_CPP17_PARALLEL_ALGORITHMS 1
2080 #if BSLS_PLATFORM_CMP_VERSION >= 1915
2090 #if BSLS_PLATFORM_CMP_VERSION >= 1920
2091 #define BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY 1
2092 #define BSLS_LIBRARYFEATURES_HAS_CPP17_CHARCONV 1
2093 #define BSLS_LIBRARYFEATURES_HAS_CPP17_SEARCH_FUNCTORS 1
2094 #define BSLS_LIBRARYFEATURES_HAS_CPP17_SPECIAL_MATH_FUNCTIONS 1
2095 #define BSLS_LIBRARYFEATURES_HAS_CPP17_TIMESPEC_GET 1
2101 #if BSLS_COMPILERFEATURES_CPLUSPLUS >= 202002L
2106 #if BSLS_PLATFORM_CMP_VERSION >= 1922
2107 #define BSLS_LIBRARYFEATURES_HAS_CPP20_VERSION 1
2113 #if BSLS_PLATFORM_CMP_VERSION >= 1930
2114 #define BSLS_LIBRARYFEATURES_HAS_CPP20_BASELINE_LIBRARY 1
2120 #if defined _HAS_AUTO_PTR_ETC
2121 #if _HAS_AUTO_PTR_ETC
2122 #undef BSLS_LIBRARYFEATURES_HAS_CPP17_DEPRECATED_REMOVED
2124 #define BSLS_LIBRARYFEATURES_HAS_CPP17_DEPRECATED_REMOVED 1
2130 #if defined _HAS_FEATURES_REMOVED_IN_CXX20
2131 #if _HAS_FEATURES_REMOVED_IN_CXX20
2132 #undef BSLS_LIBRARYFEATURES_HAS_CPP20_DEPRECATED_REMOVED
2134 #define BSLS_LIBRARYFEATURES_HAS_CPP20_DEPRECATED_REMOVED 1
2146#if BSLS_COMPILERFEATURES_CPLUSPLUS > 201103L
2149 #undef BSLS_LIBRARYFEATURES_HAS_C90_GETS
2152#if defined BSLS_LIBRARYFEATURES_HAS_CPP17_DEPRECATED_REMOVED
2155 #undef BSLS_LIBRARYFEATURES_HAS_CPP98_AUTO_PTR
2158#if BSLS_COMPILERFEATURES_CPLUSPLUS > 202002L
2164 #undef BSLS_LIBRARYFEATURES_HAS_CPP11_GARBAGE_COLLECTION_API
2174#if defined(BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY) && \
2175 defined(BSLS_COMPILERFEATURES_SUPPORT_VARIADIC_TEMPLATES) && \
2176 defined(BSLS_COMPILERFEATURES_SUPPORT_ALIAS_TEMPLATES)
2178 #define BSLS_LIBRARYFEATURES_HAS_CPP14_INTEGER_SEQUENCE 1
2197#ifdef BSLS_LIBRARYFEATURES_HAS_CPP20_VERSION
2201#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_VERSION) && \
2202 defined(BSLS_LIBRARYFEATURES_HAS_CPP20_BASELINE_LIBRARY)
2213 #if defined(__cpp_lib_concepts) && __cpp_lib_concepts >= 202002L
2214 #define BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS 1
2217 #if defined(__cpp_lib_ranges) && __cpp_lib_ranges >= 202110L && \
2218 !(defined(BSLS_PLATFORM_CMP_CLANG) && \
2219 BSLS_PLATFORM_CMP_VERSION < 160000 && \
2220 defined(BSLS_LIBRARYFEATURES_STDCPP_GNU))
2223 #define BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES 1
2226 #if defined(__cpp_lib_source_location) && \
2227 __cpp_lib_source_location >= 201907L
2228 #define BSLS_LIBRARYFEATURES_HAS_CPP20_SOURCE_LOCATION 1
2231 #if defined(__cpp_lib_atomic_ref) && \
2232 __cpp_lib_atomic_ref >= 201806L
2233 #define BSLS_LIBRARYFEATURES_HAS_CPP20_ATOMIC_REF 1
2236 #if defined(__cpp_lib_atomic_lock_free_type_aliases) && \
2237 __cpp_lib_atomic_lock_free_type_aliases >= 201907L
2238 #define BSLS_LIBRARYFEATURES_HAS_CPP20_ATOMIC_LOCK_FREE_TYPE_ALIASES 1
2242 #if defined(__cpp_lib_atomic_wait) && __cpp_lib_atomic_wait >= 201907L && \
2243 !defined(BSLS_LIBRARYFEATURES_STDCPP_GNU)
2244 #define BSLS_LIBRARYFEATURES_HAS_CPP20_ATOMIC_WAIT_FREE_FUNCTIONS 1
2247 #if defined(__cpp_lib_atomic_flag_test) && \
2248 __cpp_lib_atomic_flag_test >= 201907L && \
2249 !defined(BSLS_LIBRARYFEATURES_STDCPP_GNU)
2250 #define BSLS_LIBRARYFEATURES_HAS_CPP20_ATOMIC_FLAG_TEST_FREE_FUNCTIONS 1
2253 #if (defined(__cpp_lib_smart_ptr_for_overwrite) && \
2254 __cpp_lib_smart_ptr_for_overwrite >= 202002L) || \
2255 (defined(BSLS_LIBRARYFEATURES_STDCPP_GNU) && \
2256 (_GLIBCXX_RELEASE == 11 || _GLIBCXX_RELEASE == 12))
2258 #define BSLS_LIBRARYFEATURES_HAS_CPP20_MAKE_UNIQUE_FOR_OVERWRITE 1
2261 #if defined(__cpp_lib_chrono) && __cpp_lib_chrono >= 201907L
2262 #define BSLS_LIBRARYFEATURES_HAS_CPP20_CALENDAR 1
2270 #if defined(__cpp_lib_is_layout_compatible) && \
2271 __cpp_lib_is_layout_compatible >= 201907L
2272 #define BSLS_LIBRARYFEATURES_HAS_CPP20_IS_LAYOUT_COMPATIBLE 1
2278 #if defined(__cpp_lib_is_layout_compatible) && \
2279 __cpp_lib_is_layout_compatible >= 201907L
2280 #define BSLS_LIBRARYFEATURES_HAS_CPP20_IS_CORRESPONDING_MEMBER 1
2283 #if defined(__cpp_lib_is_pointer_interconvertible) && \
2284 __cpp_lib_is_pointer_interconvertible >= 201907L
2285 #define BSLS_LIBRARYFEATURES_HAS_CPP20_IS_POINTER_INTERCONVERTIBLE 1
2288 #if defined(__cpp_lib_jthread) && __cpp_lib_jthread >= 201911L
2289 #define BSLS_LIBRARYFEATURES_HAS_CPP20_JTHREAD 1
2300#if defined(BSLS_LIBRARYFEATURES_HAS_CPP23_BASELINE_LIBRARY)
2301#define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME bsls_libraryfeatures_CPP23_ABI
2302#elif defined(BSLS_LIBRARYFEATURES_HAS_CPP20_BASELINE_LIBRARY)
2303#define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME bsls_libraryfeatures_CPP20_ABI
2304#elif defined(BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY)
2305#define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME bsls_libraryfeatures_CPP17_ABI
2306#elif defined(BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY)
2307#define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME bsls_libraryfeatures_CPP14_ABI
2308#elif defined(BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY)
2309#define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME bsls_libraryfeatures_CPP11_ABI
2311#define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME bsls_libraryfeatures_CPP03_ABI
2319 bsls_libraryfeatures_assertion,
2320 BloombergLP::BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME)
#define BSLS_IDENT(str)
Definition bsls_ident.h:195
#define BSLS_LIBRARYFEATURES_LINKER_CHECK_NAME
Definition bsls_libraryfeatures.h:2309
#define BSLS_LINKCOERCION_FORCE_SYMBOL_DEPENDENCY(type, refName, referredSymbol)
Definition bsls_linkcoercion.h:194