diff --git a/.gitignore b/.gitignore index 1587cce..6349505 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ /corectrl-v1.1.0.tar.gz /corectrl-v1.1.1.tar.gz /corectrl-v1.1.2.tar.gz +/corectrl-v1.1.3.tar.gz diff --git a/52967849d205d56bc2e2b3b1f3032bfa65e847cb.patch b/52967849d205d56bc2e2b3b1f3032bfa65e847cb.patch deleted file mode 100644 index 7752635..0000000 --- a/52967849d205d56bc2e2b3b1f3032bfa65e847cb.patch +++ /dev/null @@ -1,11293 +0,0 @@ -From 52967849d205d56bc2e2b3b1f3032bfa65e847cb Mon Sep 17 00:00:00 2001 -From: Juan Palacios -Date: Sun, 2 May 2021 20:00:56 +0200 -Subject: [PATCH] Update catch2 - -This fix tests compilation with newer glibc. - -Fixes #178 ---- - tests/3rdparty/catch/catch.hpp | 8348 ++++++++++++++++++++++---------- - 1 file changed, 5794 insertions(+), 2554 deletions(-) - -diff --git a/tests/3rdparty/catch/catch.hpp b/tests/3rdparty/catch/catch.hpp -index 994de46..36eaeb2 100644 ---- a/tests/3rdparty/catch/catch.hpp -+++ b/tests/3rdparty/catch/catch.hpp -@@ -1,9 +1,9 @@ - /* -- * Catch v2.6.1 -- * Generated: 2019-02-12 19:52:52.262497 -+ * Catch v2.13.6 -+ * Generated: 2021-04-16 18:23:38.044268 - * ---------------------------------------------------------- - * This file has been merged from multiple headers. Please don't edit it directly -- * Copyright (c) 2019 Two Blue Cubes Ltd. All rights reserved. -+ * Copyright (c) 2021 Two Blue Cubes Ltd. All rights reserved. - * - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -@@ -14,8 +14,8 @@ - - - #define CATCH_VERSION_MAJOR 2 --#define CATCH_VERSION_MINOR 6 --#define CATCH_VERSION_PATCH 1 -+#define CATCH_VERSION_MINOR 13 -+#define CATCH_VERSION_PATCH 6 - - #ifdef __clang__ - # pragma clang system_header -@@ -66,13 +66,16 @@ - #if !defined(CATCH_CONFIG_IMPL_ONLY) - // start catch_platform.h - -+// See e.g.: -+// https://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h.auto.html - #ifdef __APPLE__ --# include --# if TARGET_OS_OSX == 1 --# define CATCH_PLATFORM_MAC --# elif TARGET_OS_IPHONE == 1 --# define CATCH_PLATFORM_IPHONE --# endif -+# include -+# if (defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1) || \ -+ (defined(TARGET_OS_MAC) && TARGET_OS_MAC == 1) -+# define CATCH_PLATFORM_MAC -+# elif (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE == 1) -+# define CATCH_PLATFORM_IPHONE -+# endif - - #elif defined(linux) || defined(__linux) || defined(__linux__) - # define CATCH_PLATFORM_LINUX -@@ -132,30 +135,51 @@ namespace Catch { - - #endif - --#if defined(CATCH_CPP17_OR_GREATER) --# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS -+// Only GCC compiler should be used in this block, so other compilers trying to -+// mask themselves as GCC should be ignored. -+#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) && !defined(__LCC__) -+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic push" ) -+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic pop" ) -+ -+# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) -+ - #endif - --#ifdef __clang__ -+#if defined(__clang__) -+ -+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic push" ) -+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic pop" ) -+ -+// As of this writing, IBM XL's implementation of __builtin_constant_p has a bug -+// which results in calls to destructors being emitted for each temporary, -+// without a matching initialization. In practice, this can result in something -+// like `std::string::~string` being called on an uninitialized value. -+// -+// For example, this code will likely segfault under IBM XL: -+// ``` -+// REQUIRE(std::string("12") + "34" == "1234") -+// ``` -+// -+// Therefore, `CATCH_INTERNAL_IGNORE_BUT_WARN` is not implemented. -+# if !defined(__ibmxl__) && !defined(__CUDACC__) -+# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) /* NOLINT(cppcoreguidelines-pro-type-vararg, hicpp-vararg) */ -+# endif -+ -+# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ -+ _Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \ -+ _Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"") -+ -+# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ -+ _Pragma( "clang diagnostic ignored \"-Wparentheses\"" ) -+ -+# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \ -+ _Pragma( "clang diagnostic ignored \"-Wunused-variable\"" ) -+ -+# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \ -+ _Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" ) - --# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ -- _Pragma( "clang diagnostic push" ) \ -- _Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \ -- _Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"") --# define CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \ -- _Pragma( "clang diagnostic pop" ) -- --# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ -- _Pragma( "clang diagnostic push" ) \ -- _Pragma( "clang diagnostic ignored \"-Wparentheses\"" ) --# define CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS \ -- _Pragma( "clang diagnostic pop" ) -- --# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \ -- _Pragma( "clang diagnostic push" ) \ -- _Pragma( "clang diagnostic ignored \"-Wunused-variable\"" ) --# define CATCH_INTERNAL_UNSUPPRESS_UNUSED_WARNINGS \ -- _Pragma( "clang diagnostic pop" ) -+# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \ -+ _Pragma( "clang diagnostic ignored \"-Wunused-template\"" ) - - #endif // __clang__ - -@@ -180,6 +204,7 @@ namespace Catch { - // Android somehow still does not support std::to_string - #if defined(__ANDROID__) - # define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING -+# define CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE - #endif - - //////////////////////////////////////////////////////////////////////////////// -@@ -204,20 +229,19 @@ namespace Catch { - // some versions of cygwin (most) do not support std::to_string. Use the libstd check. - // https://gcc.gnu.org/onlinedocs/gcc-4.8.2/libstdc++/api/a01053_source.html line 2812-2813 - # if !((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \ -- && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)) -+ && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)) - --# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING -+# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING - - # endif - #endif // __CYGWIN__ - - //////////////////////////////////////////////////////////////////////////////// - // Visual C++ --#ifdef _MSC_VER -+#if defined(_MSC_VER) - --# if _MSC_VER >= 1900 // Visual Studio 2015 or newer --# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS --# endif -+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION __pragma( warning(push) ) -+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION __pragma( warning(pop) ) - - // Universal Windows platform does not support SEH - // Or console colours (or console at all...) -@@ -230,10 +254,17 @@ namespace Catch { - // MSVC traditional preprocessor needs some workaround for __VA_ARGS__ - // _MSVC_TRADITIONAL == 0 means new conformant preprocessor - // _MSVC_TRADITIONAL == 1 means old traditional non-conformant preprocessor --# if !defined(_MSVC_TRADITIONAL) || (defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL) --# define CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR --# endif -+# if !defined(__clang__) // Handle Clang masquerading for msvc -+# if !defined(_MSVC_TRADITIONAL) || (defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL) -+# define CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -+# endif // MSVC_TRADITIONAL -+# endif // __clang__ -+ -+#endif // _MSC_VER - -+#if defined(_REENTRANT) || defined(_MSC_VER) -+// Enable async processing, as -pthread is specified or no additional linking is required -+# define CATCH_INTERNAL_CONFIG_USE_ASYNC - #endif // _MSC_VER - - //////////////////////////////////////////////////////////////////////////////// -@@ -266,40 +297,56 @@ namespace Catch { - #endif - - //////////////////////////////////////////////////////////////////////////////// --// Check if string_view is available and usable --// The check is split apart to work around v140 (VS2015) preprocessor issue... --#if defined(__has_include) --#if __has_include() && defined(CATCH_CPP17_OR_GREATER) --# define CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW --#endif -+ -+// RTX is a special version of Windows that is real time. -+// This means that it is detected as Windows, but does not provide -+// the same set of capabilities as real Windows does. -+#if defined(UNDER_RTSS) || defined(RTX64_BUILD) -+ #define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH -+ #define CATCH_INTERNAL_CONFIG_NO_ASYNC -+ #define CATCH_CONFIG_COLOUR_NONE - #endif - --//////////////////////////////////////////////////////////////////////////////// --// Check if optional is available and usable --#if defined(__has_include) --# if __has_include() && defined(CATCH_CPP17_OR_GREATER) --# define CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL --# endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) --#endif // __has_include -+#if !defined(_GLIBCXX_USE_C99_MATH_TR1) -+#define CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER -+#endif - --//////////////////////////////////////////////////////////////////////////////// --// Check if variant is available and usable -+// Various stdlib support checks that require __has_include - #if defined(__has_include) --# if __has_include() && defined(CATCH_CPP17_OR_GREATER) --# if defined(__clang__) && (__clang_major__ < 8) -- // work around clang bug with libstdc++ https://bugs.llvm.org/show_bug.cgi?id=31852 -- // fix should be in clang 8, workaround in libstdc++ 8.2 --# include --# if defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) --# define CATCH_CONFIG_NO_CPP17_VARIANT --# else --# define CATCH_INTERNAL_CONFIG_CPP17_VARIANT --# endif // defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) --# else --# define CATCH_INTERNAL_CONFIG_CPP17_VARIANT --# endif // defined(__clang__) && (__clang_major__ < 8) --# endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) --#endif // __has_include -+ // Check if string_view is available and usable -+ #if __has_include() && defined(CATCH_CPP17_OR_GREATER) -+ # define CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW -+ #endif -+ -+ // Check if optional is available and usable -+ # if __has_include() && defined(CATCH_CPP17_OR_GREATER) -+ # define CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL -+ # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) -+ -+ // Check if byte is available and usable -+ # if __has_include() && defined(CATCH_CPP17_OR_GREATER) -+ # include -+ # if __cpp_lib_byte > 0 -+ # define CATCH_INTERNAL_CONFIG_CPP17_BYTE -+ # endif -+ # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) -+ -+ // Check if variant is available and usable -+ # if __has_include() && defined(CATCH_CPP17_OR_GREATER) -+ # if defined(__clang__) && (__clang_major__ < 8) -+ // work around clang bug with libstdc++ https://bugs.llvm.org/show_bug.cgi?id=31852 -+ // fix should be in clang 8, workaround in libstdc++ 8.2 -+ # include -+ # if defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) -+ # define CATCH_CONFIG_NO_CPP17_VARIANT -+ # else -+ # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT -+ # endif // defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) -+ # else -+ # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT -+ # endif // defined(__clang__) && (__clang_major__ < 8) -+ # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) -+#endif // defined(__has_include) - - #if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) - # define CATCH_CONFIG_COUNTER -@@ -324,10 +371,6 @@ namespace Catch { - # define CATCH_CONFIG_CPP17_OPTIONAL - #endif - --#if defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) --# define CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS --#endif -- - #if defined(CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_NO_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_CPP17_STRING_VIEW) - # define CATCH_CONFIG_CPP17_STRING_VIEW - #endif -@@ -336,6 +379,10 @@ namespace Catch { - # define CATCH_CONFIG_CPP17_VARIANT - #endif - -+#if defined(CATCH_INTERNAL_CONFIG_CPP17_BYTE) && !defined(CATCH_CONFIG_NO_CPP17_BYTE) && !defined(CATCH_CONFIG_CPP17_BYTE) -+# define CATCH_CONFIG_CPP17_BYTE -+#endif -+ - #if defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT) - # define CATCH_INTERNAL_CONFIG_NEW_CAPTURE - #endif -@@ -352,17 +399,53 @@ namespace Catch { - # define CATCH_CONFIG_POLYFILL_ISNAN - #endif - -+#if defined(CATCH_INTERNAL_CONFIG_USE_ASYNC) && !defined(CATCH_INTERNAL_CONFIG_NO_ASYNC) && !defined(CATCH_CONFIG_NO_USE_ASYNC) && !defined(CATCH_CONFIG_USE_ASYNC) -+# define CATCH_CONFIG_USE_ASYNC -+#endif -+ -+#if defined(CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_NO_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_ANDROID_LOGWRITE) -+# define CATCH_CONFIG_ANDROID_LOGWRITE -+#endif -+ -+#if defined(CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_NO_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_GLOBAL_NEXTAFTER) -+# define CATCH_CONFIG_GLOBAL_NEXTAFTER -+#endif -+ -+// Even if we do not think the compiler has that warning, we still have -+// to provide a macro that can be used by the code. -+#if !defined(CATCH_INTERNAL_START_WARNINGS_SUPPRESSION) -+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION -+#endif -+#if !defined(CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION) -+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION -+#endif - #if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) - # define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS --# define CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS - #endif - #if !defined(CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS) - # define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS --# define CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS - #endif - #if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS) - # define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS --# define CATCH_INTERNAL_UNSUPPRESS_UNUSED_WARNINGS -+#endif -+#if !defined(CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS) -+# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS -+#endif -+ -+// The goal of this macro is to avoid evaluation of the arguments, but -+// still have the compiler warn on problems inside... -+#if !defined(CATCH_INTERNAL_IGNORE_BUT_WARN) -+# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) -+#endif -+ -+#if defined(__APPLE__) && defined(__apple_build_version__) && (__clang_major__ < 10) -+# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS -+#elif defined(__clang__) && (__clang_major__ < 5) -+# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS -+#endif -+ -+#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS) -+# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS - #endif - - #if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) -@@ -427,7 +510,7 @@ namespace Catch { - SourceLineInfo( SourceLineInfo&& ) noexcept = default; - SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default; - -- bool empty() const noexcept; -+ bool empty() const noexcept { return file[0] == '\0'; } - bool operator == ( SourceLineInfo const& other ) const noexcept; - bool operator < ( SourceLineInfo const& other ) const noexcept; - -@@ -468,9 +551,10 @@ namespace Catch { - } // end namespace Catch - - #define CATCH_REGISTER_TAG_ALIAS( alias, spec ) \ -+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \ - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } \ -- CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS -+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION - - // end catch_tag_alias_autoregistrar.h - // start catch_test_registry.h -@@ -497,6 +581,7 @@ namespace Catch { - virtual std::vector const& getAllTestsSorted( IConfig const& config ) const = 0; - }; - -+ bool isThrowSafe( TestCase const& testCase, IConfig const& config ); - bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ); - std::vector filterTests( std::vector const& testCases, TestSpec const& testSpec, IConfig const& config ); - std::vector const& getAllTestCasesSorted( IConfig const& config ); -@@ -509,53 +594,30 @@ namespace Catch { - #include - #include - #include -+#include - - namespace Catch { - - /// A non-owning string class (similar to the forthcoming std::string_view) - /// Note that, because a StringRef may be a substring of another string, -- /// it may not be null terminated. c_str() must return a null terminated -- /// string, however, and so the StringRef will internally take ownership -- /// (taking a copy), if necessary. In theory this ownership is not externally -- /// visible - but it does mean (substring) StringRefs should not be shared between -- /// threads. -+ /// it may not be null terminated. - class StringRef { - public: - using size_type = std::size_t; -+ using const_iterator = const char*; - - private: -- friend struct StringRefTestAccess; -- -- char const* m_start; -- size_type m_size; -- -- char* m_data = nullptr; -- -- void takeOwnership(); -- - static constexpr char const* const s_empty = ""; - -- public: // construction/ assignment -- StringRef() noexcept -- : StringRef( s_empty, 0 ) -- {} -- -- StringRef( StringRef const& other ) noexcept -- : m_start( other.m_start ), -- m_size( other.m_size ) -- {} -+ char const* m_start = s_empty; -+ size_type m_size = 0; - -- StringRef( StringRef&& other ) noexcept -- : m_start( other.m_start ), -- m_size( other.m_size ), -- m_data( other.m_data ) -- { -- other.m_data = nullptr; -- } -+ public: // construction -+ constexpr StringRef() noexcept = default; - - StringRef( char const* rawChars ) noexcept; - -- StringRef( char const* rawChars, size_type size ) noexcept -+ constexpr StringRef( char const* rawChars, size_type size ) noexcept - : m_start( rawChars ), - m_size( size ) - {} -@@ -565,101 +627,64 @@ namespace Catch { - m_size( stdString.size() ) - {} - -- ~StringRef() noexcept { -- delete[] m_data; -- } -- -- auto operator = ( StringRef const &other ) noexcept -> StringRef& { -- delete[] m_data; -- m_data = nullptr; -- m_start = other.m_start; -- m_size = other.m_size; -- return *this; -+ explicit operator std::string() const { -+ return std::string(m_start, m_size); - } - -- operator std::string() const; -- -- void swap( StringRef& other ) noexcept; -- - public: // operators - auto operator == ( StringRef const& other ) const noexcept -> bool; -- auto operator != ( StringRef const& other ) const noexcept -> bool; -+ auto operator != (StringRef const& other) const noexcept -> bool { -+ return !(*this == other); -+ } - -- auto operator[] ( size_type index ) const noexcept -> char; -+ auto operator[] ( size_type index ) const noexcept -> char { -+ assert(index < m_size); -+ return m_start[index]; -+ } - - public: // named queries -- auto empty() const noexcept -> bool { -+ constexpr auto empty() const noexcept -> bool { - return m_size == 0; - } -- auto size() const noexcept -> size_type { -+ constexpr auto size() const noexcept -> size_type { - return m_size; - } - -- auto numberOfCharacters() const noexcept -> size_type; -+ // Returns the current start pointer. If the StringRef is not -+ // null-terminated, throws std::domain_exception - auto c_str() const -> char const*; - - public: // substrings and searches -- auto substr( size_type start, size_type size ) const noexcept -> StringRef; -+ // Returns a substring of [start, start + length). -+ // If start + length > size(), then the substring is [start, size()). -+ // If start > size(), then the substring is empty. -+ auto substr( size_type start, size_type length ) const noexcept -> StringRef; - -- // Returns the current start pointer. -- // Note that the pointer can change when if the StringRef is a substring -- auto currentData() const noexcept -> char const*; -+ // Returns the current start pointer. May not be null-terminated. -+ auto data() const noexcept -> char const*; - -- private: // ownership queries - may not be consistent between calls -- auto isOwned() const noexcept -> bool; -- auto isSubstring() const noexcept -> bool; -- }; -+ constexpr auto isNullTerminated() const noexcept -> bool { -+ return m_start[m_size] == '\0'; -+ } - -- auto operator + ( StringRef const& lhs, StringRef const& rhs ) -> std::string; -- auto operator + ( StringRef const& lhs, char const* rhs ) -> std::string; -- auto operator + ( char const* lhs, StringRef const& rhs ) -> std::string; -+ public: // iterators -+ constexpr const_iterator begin() const { return m_start; } -+ constexpr const_iterator end() const { return m_start + m_size; } -+ }; - - auto operator += ( std::string& lhs, StringRef const& sr ) -> std::string&; - auto operator << ( std::ostream& os, StringRef const& sr ) -> std::ostream&; - -- inline auto operator "" _sr( char const* rawChars, std::size_t size ) noexcept -> StringRef { -+ constexpr auto operator "" _sr( char const* rawChars, std::size_t size ) noexcept -> StringRef { - return StringRef( rawChars, size ); - } -- - } // namespace Catch - --inline auto operator "" _catch_sr( char const* rawChars, std::size_t size ) noexcept -> Catch::StringRef { -+constexpr auto operator "" _catch_sr( char const* rawChars, std::size_t size ) noexcept -> Catch::StringRef { - return Catch::StringRef( rawChars, size ); - } - - // end catch_stringref.h --// start catch_type_traits.hpp -- -- --#include -- --namespace Catch{ -- --#ifdef CATCH_CPP17_OR_GREATER -- template -- inline constexpr auto is_unique = std::true_type{}; -- -- template -- inline constexpr auto is_unique = std::bool_constant< -- (!std::is_same_v && ...) && is_unique -- >{}; --#else -- --template --struct is_unique : std::true_type{}; -- --template --struct is_unique : std::integral_constant --::value -- && is_unique::value -- && is_unique::value -->{}; -- --#endif --} -- --// end catch_type_traits.hpp - // start catch_preprocessor.hpp - - -@@ -711,24 +736,181 @@ struct is_unique : std::integral_constant - #define INTERNAL_CATCH_EXPAND2(...) INTERNAL_CATCH_NO## __VA_ARGS__ - #define INTERNAL_CATCH_DEF(...) INTERNAL_CATCH_DEF __VA_ARGS__ - #define INTERNAL_CATCH_NOINTERNAL_CATCH_DEF -+#define INTERNAL_CATCH_STRINGIZE(...) INTERNAL_CATCH_STRINGIZE2(__VA_ARGS__) -+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -+#define INTERNAL_CATCH_STRINGIZE2(...) #__VA_ARGS__ -+#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) -+#else -+// MSVC is adding extra space and needs another indirection to expand INTERNAL_CATCH_NOINTERNAL_CATCH_DEF -+#define INTERNAL_CATCH_STRINGIZE2(...) INTERNAL_CATCH_STRINGIZE3(__VA_ARGS__) -+#define INTERNAL_CATCH_STRINGIZE3(...) #__VA_ARGS__ -+#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) (INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) + 1) -+#endif -+ -+#define INTERNAL_CATCH_MAKE_NAMESPACE2(...) ns_##__VA_ARGS__ -+#define INTERNAL_CATCH_MAKE_NAMESPACE(name) INTERNAL_CATCH_MAKE_NAMESPACE2(name) - - #define INTERNAL_CATCH_REMOVE_PARENS(...) INTERNAL_CATCH_EXPAND1(INTERNAL_CATCH_DEF __VA_ARGS__) - --#define INTERNAL_CATCH_TEMPLATE_UNIQUE_NAME2(Name, ...) INTERNAL_CATCH_TEMPLATE_UNIQUE_NAME3(Name, __VA_ARGS__) - #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR --#define INTERNAL_CATCH_TEMPLATE_UNIQUE_NAME3(Name,...) Name " - " #__VA_ARGS__ --#define INTERNAL_CATCH_TEMPLATE_UNIQUE_NAME(Name,...) INTERNAL_CATCH_TEMPLATE_UNIQUE_NAME2(Name, INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__)) -+#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) decltype(get_wrapper()) -+#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__)) - #else --// MSVC is adding extra space and needs more calls to properly remove () --#define INTERNAL_CATCH_TEMPLATE_UNIQUE_NAME3(Name,...) Name " -" #__VA_ARGS__ --#define INTERNAL_CATCH_TEMPLATE_UNIQUE_NAME1(Name, ...) INTERNAL_CATCH_TEMPLATE_UNIQUE_NAME2(Name, __VA_ARGS__) --#define INTERNAL_CATCH_TEMPLATE_UNIQUE_NAME(Name, ...) INTERNAL_CATCH_TEMPLATE_UNIQUE_NAME1(Name, INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__))) -+#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) INTERNAL_CATCH_EXPAND_VARGS(decltype(get_wrapper())) -+#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__))) - #endif - --#define INTERNAL_CATCH_MAKE_TYPE_LIST(types) TypeList -+#define INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(...)\ -+ CATCH_REC_LIST(INTERNAL_CATCH_MAKE_TYPE_LIST,__VA_ARGS__) -+ -+#define INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_0) INTERNAL_CATCH_REMOVE_PARENS(_0) -+#define INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_0, _1) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_1) -+#define INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_0, _1, _2) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_1, _2) -+#define INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_0, _1, _2, _3) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_1, _2, _3) -+#define INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_0, _1, _2, _3, _4) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_1, _2, _3, _4) -+#define INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_0, _1, _2, _3, _4, _5) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_1, _2, _3, _4, _5) -+#define INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_0, _1, _2, _3, _4, _5, _6) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_1, _2, _3, _4, _5, _6) -+#define INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_0, _1, _2, _3, _4, _5, _6, _7) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_1, _2, _3, _4, _5, _6, _7) -+#define INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_1, _2, _3, _4, _5, _6, _7, _8) -+#define INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9) -+#define INTERNAL_CATCH_REMOVE_PARENS_11_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10) -+ -+#define INTERNAL_CATCH_VA_NARGS_IMPL(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N -+ -+#define INTERNAL_CATCH_TYPE_GEN\ -+ template struct TypeList {};\ -+ template\ -+ constexpr auto get_wrapper() noexcept -> TypeList { return {}; }\ -+ template class...> struct TemplateTypeList{};\ -+ template class...Cs>\ -+ constexpr auto get_wrapper() noexcept -> TemplateTypeList { return {}; }\ -+ template\ -+ struct append;\ -+ template\ -+ struct rewrap;\ -+ template class, typename...>\ -+ struct create;\ -+ template class, typename>\ -+ struct convert;\ -+ \ -+ template \ -+ struct append { using type = T; };\ -+ template< template class L1, typename...E1, template class L2, typename...E2, typename...Rest>\ -+ struct append, L2, Rest...> { using type = typename append, Rest...>::type; };\ -+ template< template class L1, typename...E1, typename...Rest>\ -+ struct append, TypeList, Rest...> { using type = L1; };\ -+ \ -+ template< template class Container, template class List, typename...elems>\ -+ struct rewrap, List> { using type = TypeList>; };\ -+ template< template class Container, template class List, class...Elems, typename...Elements>\ -+ struct rewrap, List, Elements...> { using type = typename append>, typename rewrap, Elements...>::type>::type; };\ -+ \ -+ template