diff --git a/include/gsl/string_span b/include/gsl/string_span index 4064c5e..6fedad7 100644 --- a/include/gsl/string_span +++ b/include/gsl/string_span @@ -19,14 +19,14 @@ #include // for Ensures, Expects #include // for narrow_cast -#include // for operator!=, operator==, dynamic_extent +#include // for operator!=, operator==, dynamic_extent #include // for equal, lexicographical_compare #include // for array #include // for size_t, nullptr_t #include // for PTRDIFF_MAX #include -#include // for basic_string, allocator, char_traits +#include // for basic_string, allocator, char_traits #include // for declval, is_convertible, enable_if_t, add_... #if defined(_MSC_VER) && !defined(__clang__) @@ -36,7 +36,7 @@ #pragma warning(disable : 26446) // TODO: bug in parser - attributes and templates #pragma warning(disable : 26481) // TODO: suppress does not work inside templates sometimes #pragma warning(disable : 4996) // use of functions & classes marked [[deprecated]] -#endif // _MSC_VER +#endif // _MSC_VER #if defined(__GNUC__) || defined(__clang__) #pragma GCC diagnostic push @@ -57,36 +57,55 @@ namespace gsl // template -using basic_zstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = CharT*; +using basic_zstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = CharT*; template -using czstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring; +using czstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring; template -using cwzstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring; +using cwzstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring; template -using cu16zstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring; +using cu16zstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring; template -using cu32zstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring; +using cu32zstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring; template -using zstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring; +using zstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring; template -using wzstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring; +using wzstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring; template -using u16zstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring; +using u16zstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring; template -using u32zstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring; +using u32zstring [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring; namespace details { template - [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] constexpr std::size_t string_length(const CharT* str, std::size_t n) + [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see " + "isocpp/CppCoreGuidelines PR#1680")]] constexpr std::size_t + string_length(const CharT* str, std::size_t n) { if (str == nullptr || n == dynamic_extent) return 0; @@ -108,29 +127,31 @@ namespace details // Will fail-fast if sentinel cannot be found before max elements are examined. // template -[[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]]constexpr span ensure_sentinel(T* seq, - std::size_t max = static_cast(-1)) +[[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see " + "isocpp/CppCoreGuidelines PR#1680")]] constexpr span +ensure_sentinel(T* seq, std::size_t max = static_cast(-1)) { Ensures(seq != nullptr); GSL_SUPPRESS( - f.23) // NO-FORMAT: attribute // TODO: false positive // TODO: suppress does not work + f .23) // NO-FORMAT: attribute // TODO: false positive // TODO: suppress does not work auto cur = seq; Ensures(cur != nullptr); // workaround for removing the warning - GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute // TODO: suppress does not work + GSL_SUPPRESS(bounds .1) // NO-FORMAT: attribute // TODO: suppress does not work while (static_cast(cur - seq) < max && *cur != Sentinel) ++cur; Ensures(*cur == Sentinel); return {seq, static_cast(cur - seq)}; } // -// ensure_z - creates a span for a zero terminated strings. The span will not contain the zero termination. -// Will fail fast if a null-terminator cannot be found before the limit of size_type. +// ensure_z - creates a span for a zero terminated strings. The span will not contain the zero +// termination. Will fail fast if a null-terminator cannot be found before the limit of size_type. // template -[[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] constexpr span ensure_z(CharT* const& sz, - std::size_t max = static_cast(-1)) +[[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see " + "isocpp/CppCoreGuidelines PR#1680")]] constexpr span +ensure_z(CharT* const& sz, std::size_t max = static_cast(-1)) { return ensure_sentinel(sz, max); } @@ -142,37 +163,45 @@ constexpr span ensure_z(CharT (&sz)[N]) } template -[[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] constexpr span::type, dynamic_extent> ensure_z(Cont& cont) +[[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see " + "isocpp/CppCoreGuidelines PR#1680")]] constexpr span< + typename std::remove_pointer::type, dynamic_extent> +ensure_z(Cont& cont) { return ensure_z(cont.data(), cont.size()); } template -class [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] basic_string_span; +class [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, " + "see isocpp/CppCoreGuidelines PR#1680")]] basic_string_span; namespace details { template - struct [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] is_basic_string_span_oracle : std::false_type - { - }; + struct [ + [deprecated("string_span was removed from the C++ Core Guidelines. For more information, " + "see isocpp/CppCoreGuidelines PR#1680")]] is_basic_string_span_oracle + : std::false_type{}; template - struct [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] is_basic_string_span_oracle> : std::true_type - { - }; + struct [[deprecated( + "string_span was removed from the C++ Core Guidelines. For more information, see " + "isocpp/CppCoreGuidelines PR#1680")]] is_basic_string_span_oracle> + : std::true_type{}; template - struct [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] is_basic_string_span : is_basic_string_span_oracle> - { - }; + struct [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] is_basic_string_span + : is_basic_string_span_oracle>{}; } // namespace details // // string_span and relatives // template -class [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] basic_string_span +class [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, " + "see isocpp/CppCoreGuidelines PR#1680")]] basic_string_span { public: using element_type = CharT; @@ -201,11 +230,11 @@ public: // From static arrays - if 0-terminated, remove 0 from the view // All other containers allow 0s within the length, so we do not remove them template - constexpr basic_string_span(element_type (&arr)[N]) : span_(remove_z(arr)) + constexpr basic_string_span(element_type(&arr)[N]) : span_(remove_z(arr)) {} template > - constexpr basic_string_span(std::array& arr) noexcept : span_(arr) + constexpr basic_string_span(std::array & arr) noexcept : span_(arr) {} template > @@ -215,7 +244,7 @@ public: // Container signature should work for basic_string after C++17 version exists template // GSL_SUPPRESS(bounds.4) // NO-FORMAT: attribute // TODO: parser bug - constexpr basic_string_span(std::basic_string& str) + constexpr basic_string_span(std::basic_string & str) : span_(&str[0], str.length()) {} @@ -231,7 +260,7 @@ public: std::is_convertible::value && std::is_convertible().data())>::value>> - constexpr basic_string_span(Container& cont) : span_(cont) + constexpr basic_string_span(Container & cont) : span_(cont) {} template ()}; } - constexpr basic_string_span - subspan(size_type offset, size_type count = dynamic_extent) const + constexpr basic_string_span subspan( + size_type offset, size_type count = dynamic_extent) const { return {span_.subspan(offset, count)}; } @@ -310,7 +339,7 @@ private: } template - static constexpr impl_type remove_z(element_type (&sz)[N]) + static constexpr impl_type remove_z(element_type(&sz)[N]) { return remove_z(&sz[0], N); } @@ -319,28 +348,44 @@ private: }; template -using string_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_string_span; +using string_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_string_span; template -using cstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_string_span; +using cstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_string_span; template -using wstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_string_span; +using wstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_string_span; template -using cwstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_string_span; +using cwstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_string_span; template -using u16string_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_string_span; +using u16string_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_string_span; template -using cu16string_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_string_span; +using cu16string_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_string_span; template -using u32string_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_string_span; +using u32string_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_string_span; template -using cu32string_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_string_span; +using cu32string_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_string_span; // // to_string() allow (explicit) conversions from string_span to string @@ -365,7 +410,7 @@ template constexpr basic_string_span::value> as_bytes(basic_string_span s) noexcept { - GSL_SUPPRESS(type.1) // NO-FORMAT: attribute + GSL_SUPPRESS(type .1) // NO-FORMAT: attribute return {reinterpret_cast(s.data()), s.size_bytes()}; } @@ -374,14 +419,15 @@ template ::value> as_writable_bytes(basic_string_span s) noexcept { - GSL_SUPPRESS(type.1) // NO-FORMAT: attribute + GSL_SUPPRESS(type .1) // NO-FORMAT: attribute return {reinterpret_cast(s.data()), s.size_bytes()}; } // zero-terminated string span, used to convert // zero-terminated spans to legacy strings template -class [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] basic_zstring_span +class [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, " + "see isocpp/CppCoreGuidelines PR#1680")]] basic_zstring_span { public: using value_type = CharT; @@ -407,7 +453,7 @@ public: constexpr basic_zstring_span(const basic_zstring_span& other) = default; // move - constexpr basic_zstring_span(basic_zstring_span&& other) = default; + constexpr basic_zstring_span(basic_zstring_span && other) = default; // assign constexpr basic_zstring_span& operator=(const basic_zstring_span& other) = default; @@ -430,28 +476,44 @@ private: }; template -using zstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring_span; +using zstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring_span; template -using wzstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring_span; +using wzstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring_span; template -using u16zstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring_span; +using u16zstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring_span; template -using u32zstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring_span; +using u32zstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring_span; template -using czstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring_span; +using czstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring_span; template -using cwzstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring_span; +using cwzstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more " + "information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring_span; template -using cu16zstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring_span; +using cu16zstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For " + "more information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring_span; template -using cu32zstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For more information, see isocpp/CppCoreGuidelines PR#1680")]] = basic_zstring_span; +using cu32zstring_span [[deprecated("string_span was removed from the C++ Core Guidelines. For " + "more information, see isocpp/CppCoreGuidelines PR#1680")]] = + basic_zstring_span; // operator == template