forked from boostorg/static_string
Add explicit error for clang 4 & 5
This commit is contained in:
@ -17,6 +17,9 @@
|
|||||||
// Disable exceptions and their associated checks
|
// Disable exceptions and their associated checks
|
||||||
// #define BOOST_STATIC_STRING_NO_EXCEPTIONS
|
// #define BOOST_STATIC_STRING_NO_EXCEPTIONS
|
||||||
|
|
||||||
|
// Opt-in to the null terminator optimization
|
||||||
|
// #define BOOST_STATIC_STRING_NULL_OPTIMIZATION
|
||||||
|
|
||||||
// Can we have deduction guides?
|
// Can we have deduction guides?
|
||||||
#ifdef __cpp_deduction_guides
|
#ifdef __cpp_deduction_guides
|
||||||
#define BOOST_STATIC_STRING_USE_DEDUCT
|
#define BOOST_STATIC_STRING_USE_DEDUCT
|
||||||
@ -33,9 +36,6 @@
|
|||||||
#define BOOST_STATIC_STRING_NODISCARD
|
#define BOOST_STATIC_STRING_NODISCARD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#undef _<>_<EFBFBD>cplusplus
|
|
||||||
//#define _<>_<EFBFBD>cplusplus 201703L
|
|
||||||
|
|
||||||
#if __cplusplus > 201703L
|
#if __cplusplus > 201703L
|
||||||
#define BOOST_STATIC_STRING_CPP20_CONSTEXPR constexpr
|
#define BOOST_STATIC_STRING_CPP20_CONSTEXPR constexpr
|
||||||
#define BOOST_STATIC_STRING_CPP17_CONSTEXPR constexpr
|
#define BOOST_STATIC_STRING_CPP17_CONSTEXPR constexpr
|
||||||
@ -114,6 +114,10 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (__cplusplus >= 201402L) && (__cplusplus < 201703L) && defined(BOOST_STATIC_STRING_NULL_OPTIMIZATION) && defined(__clang__) && ((__clang_major__ == 4) || (__clang_major__ == 5))
|
||||||
|
#error The null terminator optimization is not supported for clang 4.x and clang 5.x
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
namespace static_string {
|
namespace static_string {
|
||||||
|
|
||||||
|
@ -209,15 +209,13 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
//#define BOOST_STATIC_STRING_NO_NULL_OPTIMIZATION
|
|
||||||
|
|
||||||
// Decides which size optimization to use
|
// Decides which size optimization to use
|
||||||
// If the size is zero, the object will have no members
|
// If the size is zero, the object will have no members
|
||||||
// Otherwise, if CharT can hold the max size of the string, store the size in the last char
|
// Otherwise, if CharT can hold the max size of the string, store the size in the last char
|
||||||
// Otherwise, store the size of the string using a member of the smallest type possible
|
// Otherwise, store the size of the string using a member of the smallest type possible
|
||||||
template<std::size_t N, typename CharT, typename Traits>
|
template<std::size_t N, typename CharT, typename Traits>
|
||||||
using optimization_base =
|
using optimization_base =
|
||||||
#ifndef BOOST_STATIC_STRING_NO_NULL_OPTIMIZATION
|
#ifdef BOOST_STATIC_STRING_USE_NULL_OPTIMIZATION
|
||||||
typename std::conditional<(N <= (std::numeric_limits<CharT>::max)()) && (N != 0),
|
typename std::conditional<(N <= (std::numeric_limits<CharT>::max)()) && (N != 0),
|
||||||
static_string_base_null<N, CharT, Traits>,
|
static_string_base_null<N, CharT, Traits>,
|
||||||
static_string_base_zero<N, CharT, Traits>>::type;
|
static_string_base_zero<N, CharT, Traits>>::type;
|
||||||
|
Reference in New Issue
Block a user