Hello community,

here is the log from the commit of package Catch2 for openSUSE:Factory checked 
in at 2020-12-03 18:41:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/Catch2 (Old)
 and      /work/SRC/openSUSE:Factory/.Catch2.new.5913 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "Catch2"

Thu Dec  3 18:41:11 2020 rev:3 rq:852325 version:2.13.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/Catch2/Catch2.changes    2020-08-15 
21:20:51.631639785 +0200
+++ /work/SRC/openSUSE:Factory/.Catch2.new.5913/Catch2.changes  2020-12-03 
18:42:46.214158295 +0100
@@ -1,0 +2,39 @@
+Tue Dec  1 11:27:06 UTC 2020 - aloi...@gmx.com
+
+- Update to version 2.13.3
+  Fixes:
+  * Fixed possible infinite loop when combining generators with
+    section filter (`-c` option)
+  Miscellaneous:
+  * Fixed `ParseAndAddCatchTests` not finding `TEST_CASE`s
+    without tags
+  * `ParseAndAddCatchTests` supports `CMP0110` policy for
+    changing behaviour of `add_test`
+    + This was the shortlived change in CMake 3.18.0 that
+      temporarily broke `ParseAndAddCatchTests`
+  version 2.13.2
+  Improvements:
+  * Implemented workaround for NVCC ICE
+  Fixes:
+  * Fixed detection of `std::uncaught_exceptions` support under
+    non-msvc platforms
+  Miscellaneous:
+  * `catch_discover_tests` has been improved significantly
+    + You can now specify which reporter should be used
+    + You can now modify where the output will be written
+    + `WORKING_DIRECTORY` setting is respected
+  * `ParseAndAddCatchTests` now supports `TEMPLATE_TEST_CASE`
+    macros
+  * Various documentation fixes and improvements
+  version 2.13.1
+  Improvements:
+  * `ParseAndAddCatchTests` handles CMake v3.18.0 correctly
+  * Improved autodetection of `std::byte`
+  * Simplified implementation of templated test cases
+    + This should have a tiny positive effect on its compilation
+      throughput
+  Fixes:
+  * Automatic stringification of ranges handles sentinel ranges
+    properly
+
+-------------------------------------------------------------------

Old:
----
  Catch2-2.13.0.tar.gz

New:
----
  Catch2-2.13.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ Catch2.spec ++++++
--- /var/tmp/diff_new_pack.xz0QQS/_old  2020-12-03 18:42:46.814159446 +0100
+++ /var/tmp/diff_new_pack.xz0QQS/_new  2020-12-03 18:42:46.818159453 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           Catch2
-Version:        2.13.0
+Version:        2.13.3
 Release:        0
 Summary:        A modern, C++-native, header-only, test framework for 
unit-tests, TDD and BDD
 License:        BSL-1.0

++++++ Catch2-2.13.0.tar.gz -> Catch2-2.13.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/CMakeLists.txt 
new/Catch2-2.13.3/CMakeLists.txt
--- old/Catch2-2.13.0/CMakeLists.txt    2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/CMakeLists.txt    2020-10-31 18:21:23.000000000 +0100
@@ -3,7 +3,7 @@
 # detect if Catch is being bundled,
 # disable testsuite in that case
 if(NOT DEFINED PROJECT_NAME)
-  set(NOT_SUBPROJECT ON)
+    set(NOT_SUBPROJECT ON)
 endif()
 
 # Catch2's build breaks if done in-tree. You probably should not build
@@ -14,14 +14,12 @@
 endif()
 
 
-project(Catch2 LANGUAGES CXX VERSION 2.13.0)
+project(Catch2 LANGUAGES CXX VERSION 2.13.3)
 
 # Provide path for scripts
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/CMake")
 
 include(GNUInstallDirs)
-include(CMakePackageConfigHelpers)
-include(CTest)
 
 option(CATCH_USE_VALGRIND "Perform SelfTests with Valgrind" OFF)
 option(CATCH_BUILD_TESTING "Build SelfTest project" ON)
@@ -33,8 +31,6 @@
 option(CATCH_INSTALL_HELPERS "Install contrib alongside library" ON)
 
 
-set_property(GLOBAL PROPERTY USE_FOLDERS ON)
-
 # define some folders
 set(CATCH_DIR ${CMAKE_CURRENT_SOURCE_DIR})
 set(SELF_TEST_DIR ${CATCH_DIR}/projects/SelfTest)
@@ -45,12 +41,16 @@
     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} 
/ENTRY:wmainCRTStartup")
 endif()
 
-if (BUILD_TESTING AND CATCH_BUILD_TESTING AND NOT_SUBPROJECT)
-    find_package(PythonInterp)
-    if (NOT PYTHONINTERP_FOUND)
-        message(FATAL_ERROR "Python not found, but required for tests")
+if(NOT_SUBPROJECT)
+    include(CTest)
+    set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+    if(BUILD_TESTING AND CATCH_BUILD_TESTING)
+        find_package(PythonInterp)
+        if (NOT PYTHONINTERP_FOUND)
+            message(FATAL_ERROR "Python not found, but required for tests")
+        endif()
+        add_subdirectory(projects)
     endif()
-    add_subdirectory(projects)
 endif()
 
 if(CATCH_BUILD_EXAMPLES)
@@ -107,6 +107,7 @@
 # a subproject via `add_subdirectory`, or the destinations will break,
 # see https://github.com/catchorg/Catch2/issues/1373
 if (NOT_SUBPROJECT)
+    include(CMakePackageConfigHelpers)
     set(CATCH_CMAKE_CONFIG_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Catch2")
 
     configure_package_config_file(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/README.md new/Catch2-2.13.3/README.md
--- old/Catch2-2.13.0/README.md 2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/README.md 2020-10-31 18:21:23.000000000 +0100
@@ -2,14 +2,14 @@
 ![catch logo](artwork/catch2-logo-small.png)
 
 [![Github 
Releases](https://img.shields.io/github/release/catchorg/catch2.svg)](https://github.com/catchorg/catch2/releases)
-[![Build 
Status](https://travis-ci.org/catchorg/Catch2.svg?branch=master)](https://travis-ci.org/catchorg/Catch2)
+[![Build 
Status](https://travis-ci.org/catchorg/Catch2.svg?branch=v2.x)](https://travis-ci.org/catchorg/Catch2)
 [![Build 
status](https://ci.appveyor.com/api/projects/status/github/catchorg/Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2)
-[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/master/graph/badge.svg)](https://codecov.io/gh/catchorg/Catch2)
-[![Try 
online](https://img.shields.io/badge/try-online-blue.svg)](https://wandbox.org/permlink/aavJBzemrxUgGV9S)
+[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/v2.x/graph/badge.svg)](https://codecov.io/gh/catchorg/Catch2)
+[![Try 
online](https://img.shields.io/badge/try-online-blue.svg)](https://wandbox.org/permlink/6JUH8Eybx4CtvkJS)
 [![Join the chat in Discord: 
https://discord.gg/4CWS9zD](https://img.shields.io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)
 
 
-<a 
href="https://github.com/catchorg/Catch2/releases/download/v2.13.0/catch.hpp";>The
 latest version of the single header can be downloaded directly using this 
link</a>
+<a 
href="https://github.com/catchorg/Catch2/releases/download/v2.13.3/catch.hpp";>The
 latest version of the single header can be downloaded directly using this 
link</a>
 
 ## Catch2 is released!
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/codecov.yml 
new/Catch2-2.13.3/codecov.yml
--- old/Catch2-2.13.0/codecov.yml       2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/codecov.yml       2020-10-31 18:21:23.000000000 +0100
@@ -19,7 +19,7 @@
 
 
 codecov:
-  branch: master
+  branch: v2.x
 
 comment:
   layout: "diff"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/contrib/Catch.cmake 
new/Catch2-2.13.3/contrib/Catch.cmake
--- old/Catch2-2.13.0/contrib/Catch.cmake       2020-07-12 20:28:38.000000000 
+0200
+++ new/Catch2-2.13.3/contrib/Catch.cmake       2020-10-31 18:21:23.000000000 
+0100
@@ -33,6 +33,10 @@
                          [TEST_SUFFIX suffix]
                          [PROPERTIES name1 value1...]
                          [TEST_LIST var]
+                         [REPORTER reporter]
+                         [OUTPUT_DIR dir]
+                         [OUTPUT_PREFIX prefix}
+                         [OUTPUT_SUFFIX suffix]
     )
 
   ``catch_discover_tests`` sets up a post-build command on the test executable
@@ -90,6 +94,28 @@
     executable is being used in multiple calls to ``catch_discover_tests()``.
     Note that this variable is only available in CTest.
 
+  ``REPORTER reporter``
+    Use the specified reporter when running the test case. The reporter will
+    be passed to the Catch executable as ``--reporter reporter``.
+
+  ``OUTPUT_DIR dir``
+    If specified, the parameter is passed along as
+    ``--out dir/<test_name>`` to Catch executable. The actual file name is the
+    same as the test name. This should be used instead of
+    ``EXTRA_ARGS --out foo`` to avoid race conditions writing the result output
+    when using parallel test execution.
+
+  ``OUTPUT_PREFIX prefix``
+    May be used in conjunction with ``OUTPUT_DIR``.
+    If specified, ``prefix`` is added to each output file name, like so
+    ``--out dir/prefix<test_name>``.
+
+  ``OUTPUT_SUFFIX suffix``
+    May be used in conjunction with ``OUTPUT_DIR``.
+    If specified, ``suffix`` is added to each output file name, like so
+    ``--out dir/<test_name>suffix``. This can be used to add a file extension 
to
+    the output e.g. ".xml".
+
 #]=======================================================================]
 
 #------------------------------------------------------------------------------
@@ -97,7 +123,7 @@
   cmake_parse_arguments(
     ""
     ""
-    "TEST_PREFIX;TEST_SUFFIX;WORKING_DIRECTORY;TEST_LIST"
+    
"TEST_PREFIX;TEST_SUFFIX;WORKING_DIRECTORY;TEST_LIST;REPORTER;OUTPUT_DIR;OUTPUT_PREFIX;OUTPUT_SUFFIX"
     "TEST_SPEC;EXTRA_ARGS;PROPERTIES"
     ${ARGN}
   )
@@ -110,7 +136,7 @@
   endif()
 
   ## Generate a unique name based on the extra arguments
-  string(SHA1 args_hash "${_TEST_SPEC} ${_EXTRA_ARGS}")
+  string(SHA1 args_hash "${_TEST_SPEC} ${_EXTRA_ARGS} ${_REPORTER} 
${_OUTPUT_DIR} ${_OUTPUT_PREFIX} ${_OUTPUT_SUFFIX}")
   string(SUBSTRING ${args_hash} 0 7 args_hash)
 
   # Define rule to generate test list for aforementioned test executable
@@ -134,6 +160,10 @@
             -D "TEST_PREFIX=${_TEST_PREFIX}"
             -D "TEST_SUFFIX=${_TEST_SUFFIX}"
             -D "TEST_LIST=${_TEST_LIST}"
+            -D "TEST_REPORTER=${_REPORTER}"
+            -D "TEST_OUTPUT_DIR=${_OUTPUT_DIR}"
+            -D "TEST_OUTPUT_PREFIX=${_OUTPUT_PREFIX}"
+            -D "TEST_OUTPUT_SUFFIX=${_OUTPUT_SUFFIX}"
             -D "CTEST_FILE=${ctest_tests_file}"
             -P "${_CATCH_DISCOVER_TESTS_SCRIPT}"
     VERBATIM
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/contrib/CatchAddTests.cmake 
new/Catch2-2.13.3/contrib/CatchAddTests.cmake
--- old/Catch2-2.13.0/contrib/CatchAddTests.cmake       2020-07-12 
20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/contrib/CatchAddTests.cmake       2020-10-31 
18:21:23.000000000 +0100
@@ -6,6 +6,10 @@
 set(spec ${TEST_SPEC})
 set(extra_args ${TEST_EXTRA_ARGS})
 set(properties ${TEST_PROPERTIES})
+set(reporter ${TEST_REPORTER})
+set(output_dir ${TEST_OUTPUT_DIR})
+set(output_prefix ${TEST_OUTPUT_PREFIX})
+set(output_suffix ${TEST_OUTPUT_SUFFIX})
 set(script)
 set(suite)
 set(tests)
@@ -32,6 +36,7 @@
   COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" ${spec} --list-test-names-only
   OUTPUT_VARIABLE output
   RESULT_VARIABLE result
+  WORKING_DIRECTORY "${TEST_WORKING_DIR}"
 )
 # Catch --list-test-names-only reports the number of tests, so 0 is... 
surprising
 if(${result} EQUAL 0)
@@ -48,6 +53,44 @@
 
 string(REPLACE "\n" ";" output "${output}")
 
+# Run test executable to get list of available reporters
+execute_process(
+  COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" ${spec} --list-reporters
+  OUTPUT_VARIABLE reporters_output
+  RESULT_VARIABLE reporters_result
+  WORKING_DIRECTORY "${TEST_WORKING_DIR}"
+)
+if(${reporters_result} EQUAL 0)
+  message(WARNING
+    "Test executable '${TEST_EXECUTABLE}' contains no reporters!\n"
+  )
+elseif(${reporters_result} LESS 0)
+  message(FATAL_ERROR
+    "Error running test executable '${TEST_EXECUTABLE}':\n"
+    "  Result: ${reporters_result}\n"
+    "  Output: ${reporters_output}\n"
+  )
+endif()
+string(FIND "${reporters_output}" "${reporter}" reporter_is_valid)
+if(reporter AND ${reporter_is_valid} EQUAL -1)
+  message(FATAL_ERROR
+    "\"${reporter}\" is not a valid reporter!\n"
+  )
+endif()
+
+# Prepare reporter
+if(reporter)
+  set(reporter_arg "--reporter ${reporter}")
+endif()
+
+# Prepare output dir
+if(output_dir AND NOT IS_ABSOLUTE ${output_dir})
+  set(output_dir "${TEST_WORKING_DIR}/${output_dir}")
+  if(NOT EXISTS ${output_dir})
+    file(MAKE_DIRECTORY ${output_dir})
+  endif()
+endif()
+
 # Parse output
 foreach(line ${output})
   set(test ${line})
@@ -56,6 +99,12 @@
   foreach(char , [ ])
     string(REPLACE ${char} "\\${char}" test_name ${test_name})
   endforeach(char)
+  # ...add output dir
+  if(output_dir)
+    string(REGEX REPLACE "[^A-Za-z0-9_]" "_" test_name_clean ${test_name})
+    set(output_dir_arg "--out 
${output_dir}/${output_prefix}${test_name_clean}${output_suffix}")
+  endif()
+  
   # ...and add to script
   add_command(add_test
     "${prefix}${test}${suffix}"
@@ -63,6 +112,8 @@
     "${TEST_EXECUTABLE}"
     "${test_name}"
     ${extra_args}
+    "${reporter_arg}"
+    "${output_dir_arg}"
   )
   add_command(set_tests_properties
     "${prefix}${test}${suffix}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/contrib/ParseAndAddCatchTests.cmake 
new/Catch2-2.13.3/contrib/ParseAndAddCatchTests.cmake
--- old/Catch2-2.13.0/contrib/ParseAndAddCatchTests.cmake       2020-07-12 
20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/contrib/ParseAndAddCatchTests.cmake       2020-10-31 
18:21:23.000000000 +0100
@@ -1,9 +1,11 @@
 
#==================================================================================================#
 #  supported macros                                                            
                    #
 #    - TEST_CASE,                                                              
                    #
+#    - TEMPLATE_TEST_CASE                                                      
                    #
 #    - SCENARIO,                                                               
                    #
 #    - TEST_CASE_METHOD,                                                       
                    #
 #    - CATCH_TEST_CASE,                                                        
                    #
+#    - CATCH_TEMPLATE_TEST_CASE                                                
                    #
 #    - CATCH_SCENARIO,                                                         
                    #
 #    - CATCH_TEST_CASE_METHOD.                                                 
                    #
 #                                                                              
                    #
@@ -106,7 +108,8 @@
     ParseAndAddCatchTests_RemoveComments(Contents)
 
     # Find definition of test names
-    string(REGEX MATCHALL "[ 
\t]*(CATCH_)?(TEST_CASE_METHOD|SCENARIO|TEST_CASE)[ \t]*\\([^\)]+\\)+[ 
\t\n]*{+[ \t]*(//[^\n]*[Tt][Ii][Mm][Ee][Oo][Uu][Tt][ \t]*[0-9]+)*" Tests 
"${Contents}")
+    # https://regex101.com/r/JygOND/1
+    string(REGEX MATCHALL "[ 
\t]*(CATCH_)?(TEMPLATE_)?(TEST_CASE_METHOD|SCENARIO|TEST_CASE)[ \t]*\\([ 
\t\n]*\"[^\"]*\"[ \t\n]*(,[ \t\n]*\"[^\"]*\")?(,[ \t\n]*[^\,\)]*)*\\)[ 
\t\n]*\{+[ \t]*(//[^\n]*[Tt][Ii][Mm][Ee][Oo][Uu][Tt][ \t]*[0-9]+)*" Tests 
"${Contents}")
 
     if(PARSE_CATCH_TESTS_ADD_TO_CONFIGURE_DEPENDS AND Tests)
       ParseAndAddCatchTests_PrintDebugMessage("Adding ${SourceFile} to 
CMAKE_CONFIGURE_DEPENDS property")
@@ -117,13 +120,21 @@
       )
     endif()
 
+    # check CMP0110 policy for new add_test() behavior
+    if(POLICY CMP0110)
+        cmake_policy(GET CMP0110 _cmp0110_value) # new add_test() behavior
+    else()
+        # just to be thorough explicitly set the variable
+        set(_cmp0110_value)
+    endif()
+
     foreach(TestName ${Tests})
         # Strip newlines
         string(REGEX REPLACE "\\\\\n|\n" "" TestName "${TestName}")
 
         # Get test type and fixture if applicable
-        string(REGEX MATCH "(CATCH_)?(TEST_CASE_METHOD|SCENARIO|TEST_CASE)[ 
\t]*\\([^,^\"]*" TestTypeAndFixture "${TestName}")
-        string(REGEX MATCH "(CATCH_)?(TEST_CASE_METHOD|SCENARIO|TEST_CASE)" 
TestType "${TestTypeAndFixture}")
+        string(REGEX MATCH 
"(CATCH_)?(TEMPLATE_)?(TEST_CASE_METHOD|SCENARIO|TEST_CASE)[ \t]*\\([^,^\"]*" 
TestTypeAndFixture "${TestName}")
+        string(REGEX MATCH 
"(CATCH_)?(TEMPLATE_)?(TEST_CASE_METHOD|SCENARIO|TEST_CASE)" TestType 
"${TestTypeAndFixture}")
         string(REGEX REPLACE "${TestType}\\([ \t]*" "" TestFixture 
"${TestTypeAndFixture}")
 
         # Get string parts of test definition
@@ -189,24 +200,39 @@
             # Escape commas in the test spec
             string(REPLACE "," "\\," Name ${Name})
 
+            # Work around CMake 3.18.0 change in `add_test()`, before the 
escaped quotes were neccessary,
+            # only with CMake 3.18.0 the escaped double quotes confuse the 
call. This change is reverted in 3.18.1
+            # And properly introduced in 3.19 with the CMP0110 policy
+            if(_cmp0110_value STREQUAL "NEW" OR ${CMAKE_VERSION} VERSION_EQUAL 
"3.18")
+                ParseAndAddCatchTests_PrintDebugMessage("CMP0110 set to NEW, 
no need for add_test(\"\") workaround")
+            else()
+                ParseAndAddCatchTests_PrintDebugMessage("CMP0110 set to OLD 
adding \"\" for add_test() workaround")
+                set(CTestName "\"${CTestName}\"")
+            endif()
+
+            # Handle template test cases
+            if("${TestTypeAndFixture}" MATCHES ".*TEMPLATE_.*")
+              set(Name "${Name} - *")
+            endif()
+
             # Add the test and set its properties
-            add_test(NAME "\"${CTestName}\"" COMMAND 
${OptionalCatchTestLauncher} $<TARGET_FILE:${TestTarget}> ${Name} 
${AdditionalCatchParameters})
+            add_test(NAME "${CTestName}" COMMAND ${OptionalCatchTestLauncher} 
$<TARGET_FILE:${TestTarget}> ${Name} ${AdditionalCatchParameters})
             # Old CMake versions do not document VERSION_GREATER_EQUAL, so we 
use VERSION_GREATER with 3.8 instead
             if(PARSE_CATCH_TESTS_NO_HIDDEN_TESTS AND ${HiddenTagFound} AND 
${CMAKE_VERSION} VERSION_GREATER "3.8")
                 ParseAndAddCatchTests_PrintDebugMessage("Setting DISABLED test 
property")
-                set_tests_properties("\"${CTestName}\"" PROPERTIES DISABLED ON)
+                set_tests_properties("${CTestName}" PROPERTIES DISABLED ON)
             else()
-                set_tests_properties("\"${CTestName}\"" PROPERTIES 
FAIL_REGULAR_EXPRESSION "No tests ran"
+                set_tests_properties("${CTestName}" PROPERTIES 
FAIL_REGULAR_EXPRESSION "No tests ran"
                                                         LABELS "${Labels}")
             endif()
             set_property(
               TARGET ${TestTarget}
               APPEND
-              PROPERTY ParseAndAddCatchTests_TESTS "\"${CTestName}\"")
+              PROPERTY ParseAndAddCatchTests_TESTS "${CTestName}")
             set_property(
               SOURCE ${SourceFile}
               APPEND
-              PROPERTY ParseAndAddCatchTests_TESTS "\"${CTestName}\"")
+              PROPERTY ParseAndAddCatchTests_TESTS "${CTestName}")
         endif()
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/docs/cmake-integration.md 
new/Catch2-2.13.3/docs/cmake-integration.md
--- old/Catch2-2.13.0/docs/cmake-integration.md 2020-07-12 20:28:38.000000000 
+0200
+++ new/Catch2-2.13.3/docs/cmake-integration.md 2020-10-31 18:21:23.000000000 
+0100
@@ -36,6 +36,20 @@
 target_link_libraries(tests Catch2::Catch2)
 ```
 
+Another possibility is to use 
[FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.html):
+```cmake
+Include(FetchContent)
+
+FetchContent_Declare(
+  Catch2
+  GIT_REPOSITORY https://github.com/catchorg/Catch2.git
+  GIT_TAG        v2.13.1)
+
+FetchContent_MakeAvailable(Catch2)
+
+target_link_libraries(tests Catch2::Catch2)
+```
+
 ## Automatic test registration
 
 Catch2's repository also contains two CMake scripts that help users
@@ -83,6 +97,10 @@
                      [TEST_SUFFIX suffix]
                      [PROPERTIES name1 value1...]
                      [TEST_LIST var]
+                     [REPORTER reporter]
+                     [OUTPUT_DIR dir]
+                     [OUTPUT_PREFIX prefix]
+                     [OUTPUT_SUFFIX suffix]
 )
 ```
 
@@ -129,6 +147,32 @@
 executable is being used in multiple calls to `catch_discover_tests()`.
 Note that this variable is only available in CTest.
 
+* `REPORTER reporter`
+
+Use the specified reporter when running the test case. The reporter will
+be passed to the test runner as `--reporter reporter`.
+
+* `OUTPUT_DIR dir`
+
+If specified, the parameter is passed along as
+`--out dir/<test_name>` to test executable. The actual file name is the
+same as the test name. This should be used instead of
+`EXTRA_ARGS --out foo` to avoid race conditions writing the result output
+when using parallel test execution.
+
+* `OUTPUT_PREFIX prefix`
+
+May be used in conjunction with `OUTPUT_DIR`.
+If specified, `prefix` is added to each output file name, like so
+`--out dir/prefix<test_name>`.
+
+* `OUTPUT_SUFFIX suffix`
+
+May be used in conjunction with `OUTPUT_DIR`.
+If specified, `suffix` is added to each output file name, like so
+`--out dir/<test_name>suffix`. This can be used to add a file extension to
+the output file name e.g. ".xml".
+
 
 ### `ParseAndAddCatchTests.cmake`
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/docs/contributing.md 
new/Catch2-2.13.3/docs/contributing.md
--- old/Catch2-2.13.0/docs/contributing.md      2020-07-12 20:28:38.000000000 
+0200
+++ new/Catch2-2.13.3/docs/contributing.md      2020-10-31 18:21:23.000000000 
+0100
@@ -21,8 +21,8 @@
 
 ## Using Git(Hub)
 
-Ongoing development happens in the `master` branch for Catch2 v2, and in
-`dev-v3` for the next major version, v3.
+Ongoing development happens in the `v2.x` branch for Catch2 v2, and in
+`devel` for the next major version, v3.
 
 Commits should be small and atomic. A commit is atomic when, after it is
 applied, the codebase, tests and all, still works as expected. Small
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/docs/generators.md 
new/Catch2-2.13.3/docs/generators.md
--- old/Catch2-2.13.0/docs/generators.md        2020-07-12 20:28:38.000000000 
+0200
+++ new/Catch2-2.13.3/docs/generators.md        2020-10-31 18:21:23.000000000 
+0100
@@ -42,7 +42,7 @@
 effects. The simplest usage is shown below, where the `SECTION` "one"
 runs 4 (2\*2) times, and `SECTION` "two" is run 6 times (2\*3).
 
-```
+```cpp
 TEST_CASE("Generators") {
     auto i = GENERATE(1, 2);
     SECTION("one") {
@@ -51,7 +51,7 @@
     }
     SECTION("two") {
         auto k = GENERATE(4, 5, 6);
-        REQUIRE(j != k);
+        REQUIRE(i != k);
     }
 }
 ```
@@ -60,7 +60,7 @@
 "two", "one"...
 
 
-The fact that `GENERATE` introduces a virtual `SECTION` can als obe used
+The fact that `GENERATE` introduces a virtual `SECTION` can also be used
 to make a generator replay only some `SECTION`s, without having to
 explicitly add a `SECTION`. As an example, the code below reports 3
 assertions, because the "first" section is run once, but the "second"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/docs/opensource-users.md 
new/Catch2-2.13.3/docs/opensource-users.md
--- old/Catch2-2.13.0/docs/opensource-users.md  2020-07-12 20:28:38.000000000 
+0200
+++ new/Catch2-2.13.3/docs/opensource-users.md  2020-10-31 18:21:23.000000000 
+0100
@@ -94,6 +94,9 @@
 
 ## Applications & Tools
 
+### [App Mesh](https://github.com/laoshanxi/app-mesh)
+A high available cloud native micro-service application management platform 
implemented by modern C++.
+
 ### [ArangoDB](https://github.com/arangodb/arangodb)
 ArangoDB is a native multi-model database with flexible data models for 
documents, graphs, and key-values.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/docs/release-notes.md 
new/Catch2-2.13.3/docs/release-notes.md
--- old/Catch2-2.13.0/docs/release-notes.md     2020-07-12 20:28:38.000000000 
+0200
+++ new/Catch2-2.13.3/docs/release-notes.md     2020-10-31 18:21:23.000000000 
+0100
@@ -2,6 +2,9 @@
 
 # Release notes
 **Contents**<br>
+[2.13.3](#2133)<br>
+[2.13.2](#2132)<br>
+[2.13.1](#2131)<br>
 [2.13.0](#2130)<br>
 [2.12.4](#2124)<br>
 [2.12.3](#2123)<br>
@@ -40,6 +43,49 @@
 [Older versions](#older-versions)<br>
 [Even Older versions](#even-older-versions)<br>
 
+
+## 2.13.3
+
+### Fixes
+* Fixed possible infinite loop when combining generators with section filter 
(`-c` option) (#2025)
+
+### Miscellaneous
+* Fixed `ParseAndAddCatchTests` not finding `TEST_CASE`s without tags (#2055, 
#2056)
+* `ParseAndAddCatchTests` supports `CMP0110` policy for changing behaviour of 
`add_test` (#2057)
+  * This was the shortlived change in CMake 3.18.0 that temporarily broke 
`ParseAndAddCatchTests`
+
+
+## 2.13.2
+
+### Improvements
+* Implemented workaround for AppleClang shadowing bug (#2030)
+* Implemented workaround for NVCC ICE (#2005, #2027)
+
+### Fixes
+* Fixed detection of `std::uncaught_exceptions` support under non-msvc 
platforms (#2021)
+* Fixed the experimental stdout/stderr capture under Windows (#2013)
+
+### Miscellaneous
+* `catch_discover_tests` has been improved significantly (#2023, #2039)
+  * You can now specify which reporter should be used
+  * You can now modify where the output will be written
+  * `WORKING_DIRECTORY` setting is respected
+* `ParseAndAddCatchTests` now supports `TEMPLATE_TEST_CASE` macros (#2031)
+* Various documentation fixes and improvements (#2022, #2028, #2034)
+
+
+## 2.13.1
+
+### Improvements
+* `ParseAndAddCatchTests` handles CMake v3.18.0 correctly (#1984)
+* Improved autodetection of `std::byte` (#1992)
+* Simplified implementation of templated test cases (#2007)
+  * This should have a tiny positive effect on its compilation throughput
+
+### Fixes
+* Automatic stringification of ranges handles sentinel ranges properly (#2004)
+
+
 ## 2.13.0
 
 ### Improvements
@@ -632,7 +678,7 @@
 * CLR objects (`T^`) can now be stringified (#1216)
   * This affects code compiled as C++/CLI
 * Added `PredicateMatcher`, a matcher that takes an arbitrary predicate 
function (#1236)
-  * See [documentation for 
details](https://github.com/catchorg/Catch2/blob/master/docs/matchers.md)
+  * See [documentation for 
details](https://github.com/catchorg/Catch2/blob/v2.x/docs/matchers.md)
 
 ### Others
 * Modified CMake-installed pkg-config to allow `#include <catch.hpp>`(#1239)
@@ -660,7 +706,7 @@
 * Added an option to warn (+ exit with error) when no tests were ran (#1158)
   * Use as `-w NoTests`
 * Added provisional support for Emscripten (#1114)
-* [Added a way to override the fallback 
stringifier](https://github.com/catchorg/Catch2/blob/master/docs/configuration.md#fallback-stringifier)
 (#1024)
+* [Added a way to override the fallback 
stringifier](https://github.com/catchorg/Catch2/blob/v2.x/docs/configuration.md#fallback-stringifier)
 (#1024)
   * This allows project's own stringification machinery to be easily reused 
for Catch
 * `Catch::Session::run()` now accepts `char const * const *`, allowing it to 
accept array of string literals (#1031, #1178)
   * The embedded version of Clara was bumped to v1.1.3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/docs/tutorial.md 
new/Catch2-2.13.3/docs/tutorial.md
--- old/Catch2-2.13.0/docs/tutorial.md  2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/docs/tutorial.md  2020-10-31 18:21:23.000000000 +0100
@@ -13,7 +13,7 @@
 
 ## Getting Catch2
 
-The simplest way to get Catch2 is to download the latest [single header 
version](https://raw.githubusercontent.com/catchorg/Catch2/master/single_include/catch2/catch.hpp).
 The single header is generated by merging a set of individual headers but it 
is still just normal source code in a header file.
+The simplest way to get Catch2 is to download the latest [single header 
version](https://raw.githubusercontent.com/catchorg/Catch2/v2.x/single_include/catch2/catch.hpp).
 The single header is generated by merging a set of individual headers but it 
is still just normal source code in a header file.
 
 Alternative ways of getting Catch2 include using your system package
 manager, or installing it using [its CMake 
package](cmake-integration.md#installing-catch2-from-git-repository).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/include/catch.hpp 
new/Catch2-2.13.3/include/catch.hpp
--- old/Catch2-2.13.0/include/catch.hpp 2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/include/catch.hpp 2020-10-31 18:21:23.000000000 +0100
@@ -11,7 +11,7 @@
 
 #define CATCH_VERSION_MAJOR 2
 #define CATCH_VERSION_MINOR 13
-#define CATCH_VERSION_PATCH 0
+#define CATCH_VERSION_PATCH 3
 
 #ifdef __clang__
 #    pragma clang system_header
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/include/internal/catch_compiler_capabilities.h 
new/Catch2-2.13.3/include/internal/catch_compiler_capabilities.h
--- old/Catch2-2.13.0/include/internal/catch_compiler_capabilities.h    
2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/include/internal/catch_compiler_capabilities.h    
2020-10-31 18:21:23.000000000 +0100
@@ -39,13 +39,9 @@
 
 #endif
 
-#if defined(__cpp_lib_uncaught_exceptions)
-#  define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
-#endif
-
 // We have to avoid both ICC and Clang, because they try to mask themselves
 // as gcc, and we want only GCC in this block
-#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC)
+#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && 
!defined(__CUDACC__)
 #    define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic 
push" )
 #    define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION  _Pragma( "GCC diagnostic 
pop" )
 
@@ -69,7 +65,7 @@
 // ```
 //
 // Therefore, `CATCH_INTERNAL_IGNORE_BUT_WARN` is not implemented.
-#  if !defined(__ibmxl__)
+#  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
 
@@ -153,9 +149,6 @@
 #  define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION __pragma( warning(push) )
 #  define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION  __pragma( warning(pop) )
 
-#  if _MSC_VER >= 1900 // Visual Studio 2015 or newer
-#    define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
-#  endif
 
 // Universal Windows platform does not support SEH
 // Or console colours (or console at all...)
@@ -240,7 +233,10 @@
 
   // Check if byte is available and usable
   #  if __has_include(<cstddef>) && defined(CATCH_CPP17_OR_GREATER)
-  #    define CATCH_INTERNAL_CONFIG_CPP17_BYTE
+  #    include <cstddef>
+  #    if __cpp_lib_byte > 0
+  #      define CATCH_INTERNAL_CONFIG_CPP17_BYTE
+  #    endif
   #  endif // __has_include(<cstddef>) && defined(CATCH_CPP17_OR_GREATER)
 
   // Check if variant is available and usable
@@ -284,10 +280,6 @@
 #  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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/include/internal/catch_config_uncaught_exceptions.hpp 
new/Catch2-2.13.3/include/internal/catch_config_uncaught_exceptions.hpp
--- old/Catch2-2.13.0/include/internal/catch_config_uncaught_exceptions.hpp     
1970-01-01 01:00:00.000000000 +0100
+++ new/Catch2-2.13.3/include/internal/catch_config_uncaught_exceptions.hpp     
2020-10-31 18:21:23.000000000 +0100
@@ -0,0 +1,44 @@
+
+//              Copyright Catch2 Authors
+// Distributed under the Boost Software License, Version 1.0.
+//   (See accompanying file LICENSE_1_0.txt or copy at
+//        https://www.boost.org/LICENSE_1_0.txt)
+
+// SPDX-License-Identifier: BSL-1.0
+
+/** \file
+ * Wrapper for UNCAUGHT_EXCEPTIONS configuration option
+ *
+ * For some functionality, Catch2 requires to know whether there is
+ * an active exception. Because `std::uncaught_exception` is deprecated
+ * in C++17, we want to use `std::uncaught_exceptions` if possible.
+ */
+
+#ifndef CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP
+#define CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP
+
+#if defined(_MSC_VER)
+#  if _MSC_VER >= 1900 // Visual Studio 2015 or newer
+#    define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
+#  endif
+#endif
+
+
+#include <exception>
+
+#if defined(__cpp_lib_uncaught_exceptions) \
+    && !defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
+
+#  define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
+#endif // __cpp_lib_uncaught_exceptions
+
+
+#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
+
+
+#endif // CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/include/internal/catch_output_redirect.cpp 
new/Catch2-2.13.3/include/internal/catch_output_redirect.cpp
--- old/Catch2-2.13.0/include/internal/catch_output_redirect.cpp        
2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/include/internal/catch_output_redirect.cpp        
2020-10-31 18:21:23.000000000 +0100
@@ -66,7 +66,7 @@
         if (tmpnam_s(m_buffer)) {
             CATCH_RUNTIME_ERROR("Could not get a temp filename");
         }
-        if (fopen_s(&m_file, m_buffer, "w")) {
+        if (fopen_s(&m_file, m_buffer, "w+")) {
             char buffer[100];
             if (strerror_s(buffer, errno)) {
                 CATCH_RUNTIME_ERROR("Could not translate errno to a string");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/include/internal/catch_run_context.cpp 
new/Catch2-2.13.3/include/internal/catch_run_context.cpp
--- old/Catch2-2.13.0/include/internal/catch_run_context.cpp    2020-07-12 
20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/include/internal/catch_run_context.cpp    2020-10-31 
18:21:23.000000000 +0100
@@ -71,13 +71,53 @@
                 // `SECTION`s.
                 // **The check for m_children.empty cannot be removed**.
                 // doing so would break `GENERATE` _not_ followed by 
`SECTION`s.
-                const bool should_wait_for_child =
-                    !m_children.empty() &&
-                    std::find_if( m_children.begin(),
-                                  m_children.end(),
-                                  []( TestCaseTracking::ITrackerPtr tracker ) {
-                                      return tracker->hasStarted();
-                                  } ) == m_children.end();
+                const bool should_wait_for_child = [&]() {
+                    // No children -> nobody to wait for
+                    if ( m_children.empty() ) {
+                        return false;
+                    }
+                    // If at least one child started executing, don't wait
+                    if ( std::find_if(
+                             m_children.begin(),
+                             m_children.end(),
+                             []( TestCaseTracking::ITrackerPtr tracker ) {
+                                 return tracker->hasStarted();
+                             } ) != m_children.end() ) {
+                        return false;
+                    }
+
+                    // No children have started. We need to check if they _can_
+                    // start, and thus we should wait for them, or they cannot
+                    // start (due to filters), and we shouldn't wait for them
+                    auto* parent = m_parent;
+                    // This is safe: there is always at least one section
+                    // tracker in a test case tracking tree
+                    while ( !parent->isSectionTracker() ) {
+                        parent = &( parent->parent() );
+                    }
+                    assert( parent &&
+                            "Missing root (test case) level section" );
+
+                    auto const& parentSection =
+                        static_cast<SectionTracker&>( *parent );
+                    auto const& filters = parentSection.getFilters();
+                    // No filters -> no restrictions on running sections
+                    if ( filters.empty() ) {
+                        return true;
+                    }
+
+                    for ( auto const& child : m_children ) {
+                        if ( child->isSectionTracker() &&
+                             std::find( filters.begin(),
+                                        filters.end(),
+                                        static_cast<SectionTracker&>( *child )
+                                            .trimmedName() ) !=
+                                 filters.end() ) {
+                            return true;
+                        }
+                    }
+                    return false;
+                }();
 
                 // This check is a bit tricky, because m_generator->next()
                 // has a side-effect, where it consumes generator's current
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/include/internal/catch_test_case_registry_impl.cpp 
new/Catch2-2.13.3/include/internal/catch_test_case_registry_impl.cpp
--- old/Catch2-2.13.0/include/internal/catch_test_case_registry_impl.cpp        
2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/include/internal/catch_test_case_registry_impl.cpp        
2020-10-31 18:21:23.000000000 +0100
@@ -22,10 +22,10 @@
 
     namespace {
         struct TestHasher {
-            explicit TestHasher(Catch::SimplePcg32& rng) {
-                basis = rng();
+            explicit TestHasher(Catch::SimplePcg32& rng_instance) {
+                basis = rng_instance();
                 basis <<= 32;
-                basis |= rng();
+                basis |= rng_instance();
             }
 
             uint64_t basis;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/include/internal/catch_test_case_tracker.cpp 
new/Catch2-2.13.3/include/internal/catch_test_case_tracker.cpp
--- old/Catch2-2.13.0/include/internal/catch_test_case_tracker.cpp      
2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/include/internal/catch_test_case_tracker.cpp      
2020-10-31 18:21:23.000000000 +0100
@@ -233,6 +233,14 @@
             m_filters.insert( m_filters.end(), filters.begin()+1, 
filters.end() );
     }
 
+    std::vector<std::string> const& SectionTracker::getFilters() const {
+        return m_filters;
+    }
+
+    std::string const& SectionTracker::trimmedName() const {
+        return m_trimmed_name;
+    }
+
 } // namespace TestCaseTracking
 
 using TestCaseTracking::ITracker;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/include/internal/catch_test_case_tracker.h 
new/Catch2-2.13.3/include/internal/catch_test_case_tracker.h
--- old/Catch2-2.13.0/include/internal/catch_test_case_tracker.h        
2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/include/internal/catch_test_case_tracker.h        
2020-10-31 18:21:23.000000000 +0100
@@ -163,6 +163,10 @@
 
         void addInitialFilters( std::vector<std::string> const& filters );
         void addNextFilters( std::vector<std::string> const& filters );
+        //! Returns filters active in this tracker
+        std::vector<std::string> const& getFilters() const;
+        //! Returns whitespace-trimmed name of the tracked section
+        std::string const& trimmedName() const;
     };
 
 } // namespace TestCaseTracking
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/include/internal/catch_test_registry.h 
new/Catch2-2.13.3/include/internal/catch_test_registry.h
--- old/Catch2-2.13.0/include/internal/catch_test_registry.h    2020-07-12 
20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/include/internal/catch_test_registry.h    2020-10-31 
18:21:23.000000000 +0100
@@ -160,7 +160,7 @@
                     int index = 0;                                    \
                     constexpr char const* tmpl_types[] = 
{CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, __VA_ARGS__)};\
                     using expander = int[];\
-                    (void)expander{(reg_test(Types{}, Catch::NameAndTags{ Name 
" - " + std::string(tmpl_types[index]), Tags } ), index++, 0)... };/* NOLINT */ 
\
+                    (void)expander{(reg_test(Types{}, Catch::NameAndTags{ Name 
" - " + std::string(tmpl_types[index]), Tags } ), index++)... };/* NOLINT */ \
                 }\
             };\
             static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
@@ -206,7 +206,7 @@
                     constexpr char const* tmpl_types[] = 
{CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, 
INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
                     constexpr char const* types_list[] = 
{CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, 
INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
                     constexpr auto num_types = sizeof(types_list) / 
sizeof(types_list[0]);\
-                    (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestFuncName<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), 
Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + 
"<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++, 
0)... };/* NOLINT */\
+                    (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestFuncName<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), 
Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + 
"<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++)... 
};/* NOLINT */\
                 }                                                     \
             };                                                        \
             static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){ \
@@ -250,7 +250,7 @@
             void reg_tests() {                                          \
                 int index = 0;                                    \
                 using expander = int[];                           \
-                (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestFunc<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), 
Catch::NameAndTags{ Name " - " + 
std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + 
std::to_string(index), Tags } ), index++, 0)... };/* NOLINT */\
+                (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestFunc<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), 
Catch::NameAndTags{ Name " - " + 
std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + 
std::to_string(index), Tags } ), index++)... };/* NOLINT */\
             }                                                     \
         };\
         static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){ \
@@ -285,7 +285,7 @@
                     int index = 0;                                    \
                     constexpr char const* tmpl_types[] = 
{CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, __VA_ARGS__)};\
                     using expander = int[];\
-                    (void)expander{(reg_test(Types{}, #ClassName, 
Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index]), Tags } ), 
index++, 0)... };/* NOLINT */ \
+                    (void)expander{(reg_test(Types{}, #ClassName, 
Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index]), Tags } ), 
index++)... };/* NOLINT */ \
                 }\
             };\
             static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
@@ -334,7 +334,7 @@
                     constexpr char const* tmpl_types[] = 
{CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, 
INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
                     constexpr char const* types_list[] = 
{CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, 
INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
                     constexpr auto num_types = sizeof(types_list) / 
sizeof(types_list[0]);\
-                    (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, 
Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + 
"<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++, 
0)... };/* NOLINT */ \
+                    (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, 
Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + 
"<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++)... 
};/* NOLINT */ \
                 }\
             };\
             static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
@@ -381,7 +381,7 @@
                 void reg_tests(){\
                     int index = 0;\
                     using expander = int[];\
-                    (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, 
Catch::NameAndTags{ Name " - " + 
std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + 
std::to_string(index), Tags } ), index++, 0)... };/* NOLINT */ \
+                    (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, 
Catch::NameAndTags{ Name " - " + 
std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + 
std::to_string(index), Tags } ), index++)... };/* NOLINT */ \
                 }\
             };\
             static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/include/internal/catch_tostring.h 
new/Catch2-2.13.3/include/internal/catch_tostring.h
--- old/Catch2-2.13.0/include/internal/catch_tostring.h 2020-07-12 
20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/include/internal/catch_tostring.h 2020-10-31 
18:21:23.000000000 +0100
@@ -309,8 +309,8 @@
 #endif
 
     namespace Detail {
-        template<typename InputIterator>
-        std::string rangeToString(InputIterator first, InputIterator last) {
+        template<typename InputIterator, typename Sentinel = InputIterator>
+        std::string rangeToString(InputIterator first, Sentinel last) {
             ReusableStringStream rss;
             rss << "{ ";
             if (first != last) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/include/internal/catch_uncaught_exceptions.cpp 
new/Catch2-2.13.3/include/internal/catch_uncaught_exceptions.cpp
--- old/Catch2-2.13.0/include/internal/catch_uncaught_exceptions.cpp    
2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/include/internal/catch_uncaught_exceptions.cpp    
2020-10-31 18:21:23.000000000 +0100
@@ -8,6 +8,8 @@
 
 #include "catch_compiler_capabilities.h"
 #include "catch_uncaught_exceptions.h"
+#include "catch_config_uncaught_exceptions.hpp"
+
 #include <exception>
 
 namespace Catch {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/include/internal/catch_version.cpp 
new/Catch2-2.13.3/include/internal/catch_version.cpp
--- old/Catch2-2.13.0/include/internal/catch_version.cpp        2020-07-12 
20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/include/internal/catch_version.cpp        2020-10-31 
18:21:23.000000000 +0100
@@ -37,7 +37,7 @@
     }
 
     Version const& libraryVersion() {
-        static Version version( 2, 13, 0, "", 0 );
+        static Version version( 2, 13, 3, "", 0 );
         return version;
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/projects/CMakeLists.txt 
new/Catch2-2.13.3/projects/CMakeLists.txt
--- old/Catch2-2.13.0/projects/CMakeLists.txt   2020-07-12 20:28:38.000000000 
+0200
+++ new/Catch2-2.13.3/projects/CMakeLists.txt   2020-10-31 18:21:23.000000000 
+0100
@@ -124,6 +124,7 @@
         ${HEADER_DIR}/internal/catch_common.h
         ${HEADER_DIR}/internal/catch_compiler_capabilities.h
         ${HEADER_DIR}/internal/catch_config.hpp
+        ${HEADER_DIR}/internal/catch_config_uncaught_exceptions.hpp
         ${HEADER_DIR}/internal/catch_console_colour.h
         ${HEADER_DIR}/internal/catch_context.h
         ${HEADER_DIR}/internal/catch_debug_console.h
@@ -418,6 +419,33 @@
 add_test(NAME FilteredSection-2 COMMAND $<TARGET_FILE:SelfTest> \#1394\ nested 
-c NestedRunSection -c s1)
 set_tests_properties(FilteredSection-2 PROPERTIES FAIL_REGULAR_EXPRESSION "No 
tests ran")
 
+add_test(
+  NAME
+    FilteredSection::GeneratorsDontCauseInfiniteLoop-1
+  COMMAND
+    $<TARGET_FILE:SelfTest> "#2025: original repro" -c "fov_0"
+)
+set_tests_properties(FilteredSection::GeneratorsDontCauseInfiniteLoop-1
+  PROPERTIES
+    PASS_REGULAR_EXPRESSION "inside with fov: 0" # This should happen
+    FAIL_REGULAR_EXPRESSION "inside with fov: 1" # This would mean there was 
no filtering
+)
+
+# GENERATE between filtered sections (both are selected)
+add_test(
+  NAME
+    FilteredSection::GeneratorsDontCauseInfiniteLoop-2
+  COMMAND
+    $<TARGET_FILE:SelfTest> "#2025: same-level sections"
+    -c "A"
+    -c "B"
+)
+set_tests_properties(FilteredSection::GeneratorsDontCauseInfiniteLoop-2
+  PROPERTIES
+    PASS_REGULAR_EXPRESSION "All tests passed \\(4 assertions in 1 test 
case\\)"
+)
+
+
 # AppVeyor has a Python 2.7 in path, but doesn't have .py files as autorunnable
 add_test(NAME ApprovalTests COMMAND ${PYTHON_EXECUTABLE} 
${CATCH_DIR}/scripts/approvalTests.py $<TARGET_FILE:SelfTest>)
 set_tests_properties(ApprovalTests PROPERTIES FAIL_REGULAR_EXPRESSION "Results 
differed")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/projects/SelfTest/Baselines/compact.sw.approved.txt 
new/Catch2-2.13.3/projects/SelfTest/Baselines/compact.sw.approved.txt
--- old/Catch2-2.13.0/projects/SelfTest/Baselines/compact.sw.approved.txt       
2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/projects/SelfTest/Baselines/compact.sw.approved.txt       
2020-10-31 18:21:23.000000000 +0100
@@ -1203,6 +1203,7 @@
 Misc.tests.cpp:<line number>: passed: std::tuple_size<TestType>::value >= 1 
for: 3 >= 1
 Misc.tests.cpp:<line number>: passed: std::tuple_size<TestType>::value >= 1 
for: 2 >= 1
 Misc.tests.cpp:<line number>: passed: std::tuple_size<TestType>::value >= 1 
for: 1 >= 1
+ToString.tests.cpp:<line number>: passed: 
Catch::Detail::stringify(UsesSentinel{}) == "{  }" for: "{  }" == "{  }"
 Decomposition.tests.cpp:<line number>: failed: truthy(false) for: Hey, its 
truthy!
 Matchers.tests.cpp:<line number>: failed: testStringForMatching(), 
Matches("this STRING contains 'abc' as a substring") for: "this string contains 
'abc' as a substring" matches "this STRING contains 'abc' as a substring" case 
sensitively
 Matchers.tests.cpp:<line number>: failed: testStringForMatching(), 
Matches("contains 'abc' as a substring") for: "this string contains 'abc' as a 
substring" matches "contains 'abc' as a substring" case sensitively
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/projects/SelfTest/Baselines/console.std.approved.txt 
new/Catch2-2.13.3/projects/SelfTest/Baselines/console.std.approved.txt
--- old/Catch2-2.13.0/projects/SelfTest/Baselines/console.std.approved.txt      
2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/projects/SelfTest/Baselines/console.std.approved.txt      
2020-10-31 18:21:23.000000000 +0100
@@ -1380,6 +1380,6 @@
   Why would you throw a std::string?
 
 ===============================================================================
-test cases:  321 |  247 passed |  70 failed |  4 failed as expected
-assertions: 1758 | 1606 passed | 131 failed | 21 failed as expected
+test cases:  322 |  248 passed |  70 failed |  4 failed as expected
+assertions: 1759 | 1607 passed | 131 failed | 21 failed as expected
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/projects/SelfTest/Baselines/console.sw.approved.txt 
new/Catch2-2.13.3/projects/SelfTest/Baselines/console.sw.approved.txt
--- old/Catch2-2.13.0/projects/SelfTest/Baselines/console.sw.approved.txt       
2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/projects/SelfTest/Baselines/console.sw.approved.txt       
2020-10-31 18:21:23.000000000 +0100
@@ -8896,6 +8896,17 @@
   1 >= 1
 
 -------------------------------------------------------------------------------
+Range type with sentinel
+-------------------------------------------------------------------------------
+ToString.tests.cpp:<line number>
+...............................................................................
+
+ToString.tests.cpp:<line number>: PASSED:
+  CHECK( Catch::Detail::stringify(UsesSentinel{}) == "{  }" )
+with expansion:
+  "{  }" == "{  }"
+
+-------------------------------------------------------------------------------
 Reconstruction should be based on stringification: #914
 -------------------------------------------------------------------------------
 Decomposition.tests.cpp:<line number>
@@ -14127,6 +14138,6 @@
 Misc.tests.cpp:<line number>: PASSED:
 
 ===============================================================================
-test cases:  321 |  231 passed |  86 failed |  4 failed as expected
-assertions: 1775 | 1606 passed | 148 failed | 21 failed as expected
+test cases:  322 |  232 passed |  86 failed |  4 failed as expected
+assertions: 1776 | 1607 passed | 148 failed | 21 failed as expected
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/projects/SelfTest/Baselines/junit.sw.approved.txt 
new/Catch2-2.13.3/projects/SelfTest/Baselines/junit.sw.approved.txt
--- old/Catch2-2.13.0/projects/SelfTest/Baselines/junit.sw.approved.txt 
2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/projects/SelfTest/Baselines/junit.sw.approved.txt 
2020-10-31 18:21:23.000000000 +0100
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <testsuitesloose text artifact
 >
-  <testsuite name="<exe-name>" errors="17" failures="132" tests="1776" 
hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
+  <testsuite name="<exe-name>" errors="17" failures="132" tests="1777" 
hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
     <properties>
       <property name="filters" 
value="~[!nonportable]~[!benchmark]~[approvals]"/>
       <property name="random-seed" value="1"/>
@@ -1045,6 +1045,7 @@
     <testcase classname="<exe-name>.global" name="Product with differing 
arities - std::tuple&lt;int, double, float>" time="{duration}" status="run"/>
     <testcase classname="<exe-name>.global" name="Product with differing 
arities - std::tuple&lt;int, double>" time="{duration}" status="run"/>
     <testcase classname="<exe-name>.global" name="Product with differing 
arities - std::tuple&lt;int>" time="{duration}" status="run"/>
+    <testcase classname="<exe-name>.global" name="Range type with sentinel" 
time="{duration}" status="run"/>
     <testcase classname="<exe-name>.global" name="Reconstruction should be 
based on stringification: #914" time="{duration}" status="run">
       <failure message="truthy(false)" type="CHECK">
 FAILED:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/projects/SelfTest/Baselines/sonarqube.sw.approved.txt 
new/Catch2-2.13.3/projects/SelfTest/Baselines/sonarqube.sw.approved.txt
--- old/Catch2-2.13.0/projects/SelfTest/Baselines/sonarqube.sw.approved.txt     
2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/projects/SelfTest/Baselines/sonarqube.sw.approved.txt     
2020-10-31 18:21:23.000000000 +0100
@@ -162,6 +162,7 @@
   </file>
   <file path="projects/<exe-name>/IntrospectiveTests/ToString.tests.cpp">
     <testCase name="Directly creating an EnumInfo" duration="{duration}"/>
+    <testCase name="Range type with sentinel" duration="{duration}"/>
     <testCase name="parseEnums/No enums" duration="{duration}"/>
     <testCase name="parseEnums/One enum value" duration="{duration}"/>
     <testCase name="parseEnums/Multiple enum values" duration="{duration}"/>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/projects/SelfTest/Baselines/xml.sw.approved.txt 
new/Catch2-2.13.3/projects/SelfTest/Baselines/xml.sw.approved.txt
--- old/Catch2-2.13.0/projects/SelfTest/Baselines/xml.sw.approved.txt   
2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/projects/SelfTest/Baselines/xml.sw.approved.txt   
2020-10-31 18:21:23.000000000 +0100
@@ -10962,6 +10962,17 @@
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
+    <TestCase name="Range type with sentinel" 
filename="projects/<exe-name>/IntrospectiveTests/ToString.tests.cpp" >
+      <Expression success="true" type="CHECK" 
filename="projects/<exe-name>/IntrospectiveTests/ToString.tests.cpp" >
+        <Original>
+          Catch::Detail::stringify(UsesSentinel{}) == "{  }"
+        </Original>
+        <Expanded>
+          "{  }" == "{  }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
     <TestCase name="Reconstruction should be based on stringification: #914" 
tags="[!hide][.][Decomposition][failing]" 
filename="projects/<exe-name>/UsageTests/Decomposition.tests.cpp" >
       <Expression success="false" type="CHECK" 
filename="projects/<exe-name>/UsageTests/Decomposition.tests.cpp" >
         <Original>
@@ -16711,9 +16722,9 @@
       </Section>
       <OverallResult success="true"/>
     </TestCase>
-    <OverallResults successes="1606" failures="149" expectedFailures="21"/>
-    <OverallResultsCases successes="231" failures="86" expectedFailures="4"/>
+    <OverallResults successes="1607" failures="149" expectedFailures="21"/>
+    <OverallResultsCases successes="232" failures="86" expectedFailures="4"/>
   </Group>
-  <OverallResults successes="1606" failures="148" expectedFailures="21"/>
-  <OverallResultsCases successes="231" failures="86" expectedFailures="4"/>
+  <OverallResults successes="1607" failures="148" expectedFailures="21"/>
+  <OverallResultsCases successes="232" failures="86" expectedFailures="4"/>
 </Catch>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/projects/SelfTest/IntrospectiveTests/ToString.tests.cpp 
new/Catch2-2.13.3/projects/SelfTest/IntrospectiveTests/ToString.tests.cpp
--- old/Catch2-2.13.0/projects/SelfTest/IntrospectiveTests/ToString.tests.cpp   
2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/projects/SelfTest/IntrospectiveTests/ToString.tests.cpp   
2020-10-31 18:21:23.000000000 +0100
@@ -4,6 +4,13 @@
 
 enum class EnumClass3 { Value1, Value2, Value3, Value4 };
 
+struct UsesSentinel {
+    using const_iterator = int const*;
+    using const_sentinel = std::nullptr_t;
+
+    const_iterator begin() const { return nullptr; }
+    const_iterator end() const { return nullptr; }
+};
 
 TEST_CASE( "parseEnums", "[Strings][enums]" ) {
     using namespace Catch::Matchers;
@@ -40,3 +47,7 @@
     CHECK( enumInfo->lookup(1) == "Value2" );
     CHECK( enumInfo->lookup(3) == "{** unexpected enum value **}" );
 }
+
+TEST_CASE("Range type with sentinel") {
+    CHECK( Catch::Detail::stringify(UsesSentinel{}) == "{  }" );
+}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Catch2-2.13.0/projects/SelfTest/UsageTests/Tricky.tests.cpp 
new/Catch2-2.13.3/projects/SelfTest/UsageTests/Tricky.tests.cpp
--- old/Catch2-2.13.0/projects/SelfTest/UsageTests/Tricky.tests.cpp     
2020-07-12 20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/projects/SelfTest/UsageTests/Tricky.tests.cpp     
2020-10-31 18:21:23.000000000 +0100
@@ -402,3 +402,28 @@
     // FAIL aborts the test by throwing a Catch exception
     FAIL("1514");
 }
+
+
+TEST_CASE( "#2025: -c shouldn't cause infinite loop", 
"[sections][generators][regression][.approvals]" ) {
+    SECTION( "Check cursor from buffer offset" ) {
+        auto bufPos = GENERATE_REF( range( 0, 44 ) );
+        WHEN( "Buffer position is " << bufPos ) { REQUIRE( 1 == 1 ); }
+    }
+}
+
+TEST_CASE("#2025: original repro", 
"[sections][generators][regression][.approvals]") {
+    auto fov = GENERATE(true, false);
+    DYNAMIC_SECTION("fov_" << fov) {
+        std::cout << "inside with fov: " << fov << '\n';
+    }
+}
+
+TEST_CASE("#2025: same-level sections", 
"[sections][generators][regression][.approvals]") {
+    SECTION("A") {
+        SUCCEED();
+    }
+    auto i = GENERATE(1, 2, 3);
+    SECTION("B") {
+        REQUIRE(i < 4);
+    }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/scripts/releaseCommon.py 
new/Catch2-2.13.3/scripts/releaseCommon.py
--- old/Catch2-2.13.0/scripts/releaseCommon.py  2020-07-12 20:28:38.000000000 
+0200
+++ new/Catch2-2.13.3/scripts/releaseCommon.py  2020-10-31 18:21:23.000000000 
+0100
@@ -79,13 +79,15 @@
             f.write( line + "\n" )
 
 def updateReadmeFile(version):
-    import updateWandbox
+
+    # Wandbox no longer accepts the single-header upload, skip
+    # import updateWandbox
 
     downloadParser = re.compile( r'<a 
href=\"https://github.com/catchorg/Catch2/releases/download/v\d+\.\d+\.\d+/catch.hpp\";>'
 )
-    success, wandboxLink = updateWandbox.uploadFiles()
-    if not success:
-        print('Error when uploading to wandbox: {}'.format(wandboxLink))
-        exit(1)
+    # success, wandboxLink = updateWandbox.uploadFiles()
+    # if not success:
+    #     print('Error when uploading to wandbox: {}'.format(wandboxLink))
+    #     exit(1)
     f = open( readmePath, 'r' )
     lines = []
     for line in f:
@@ -94,8 +96,8 @@
     f = open( readmePath, 'w' )
     for line in lines:
         line = downloadParser.sub( r'<a 
href="https://github.com/catchorg/Catch2/releases/download/v{0}/catch.hpp";>'.format(version.getVersionString())
 , line)
-        if '[![Try online](https://img.shields.io/badge/try-online-blue.svg)]' 
in line:
-            line = '[![Try 
online](https://img.shields.io/badge/try-online-blue.svg)]({0})'.format(wandboxLink)
+#        if '[![Try 
online](https://img.shields.io/badge/try-online-blue.svg)]' in line:
+#            line = '[![Try 
online](https://img.shields.io/badge/try-online-blue.svg)]({0})'.format(wandboxLink)
         f.write( line + "\n" )
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Catch2-2.13.0/single_include/catch2/catch.hpp 
new/Catch2-2.13.3/single_include/catch2/catch.hpp
--- old/Catch2-2.13.0/single_include/catch2/catch.hpp   2020-07-12 
20:28:38.000000000 +0200
+++ new/Catch2-2.13.3/single_include/catch2/catch.hpp   2020-10-31 
18:21:23.000000000 +0100
@@ -1,6 +1,6 @@
 /*
- *  Catch v2.13.0
- *  Generated: 2020-07-12 20:07:49.015950
+ *  Catch v2.13.3
+ *  Generated: 2020-10-31 18:20:31.045274
  *  ----------------------------------------------------------
  *  This file has been merged from multiple headers. Please don't edit it 
directly
  *  Copyright (c) 2020 Two Blue Cubes Ltd. All rights reserved.
@@ -15,7 +15,7 @@
 
 #define CATCH_VERSION_MAJOR 2
 #define CATCH_VERSION_MINOR 13
-#define CATCH_VERSION_PATCH 0
+#define CATCH_VERSION_PATCH 3
 
 #ifdef __clang__
 #    pragma clang system_header
@@ -132,13 +132,9 @@
 
 #endif
 
-#if defined(__cpp_lib_uncaught_exceptions)
-#  define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
-#endif
-
 // We have to avoid both ICC and Clang, because they try to mask themselves
 // as gcc, and we want only GCC in this block
-#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC)
+#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && 
!defined(__CUDACC__)
 #    define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic 
push" )
 #    define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION  _Pragma( "GCC diagnostic 
pop" )
 
@@ -162,7 +158,7 @@
 // ```
 //
 // Therefore, `CATCH_INTERNAL_IGNORE_BUT_WARN` is not implemented.
-#  if !defined(__ibmxl__)
+#  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
 
@@ -244,10 +240,6 @@
 #  define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION __pragma( warning(push) )
 #  define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION  __pragma( warning(pop) )
 
-#  if _MSC_VER >= 1900 // Visual Studio 2015 or newer
-#    define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
-#  endif
-
 // Universal Windows platform does not support SEH
 // Or console colours (or console at all...)
 #  if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP)
@@ -330,7 +322,10 @@
 
   // Check if byte is available and usable
   #  if __has_include(<cstddef>) && defined(CATCH_CPP17_OR_GREATER)
-  #    define CATCH_INTERNAL_CONFIG_CPP17_BYTE
+  #    include <cstddef>
+  #    if __cpp_lib_byte > 0
+  #      define CATCH_INTERNAL_CONFIG_CPP17_BYTE
+  #    endif
   #  endif // __has_include(<cstddef>) && defined(CATCH_CPP17_OR_GREATER)
 
   // Check if variant is available and usable
@@ -373,10 +368,6 @@
 #  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
@@ -1105,7 +1096,7 @@
                     int index = 0;                                    \
                     constexpr char const* tmpl_types[] = 
{CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, __VA_ARGS__)};\
                     using expander = int[];\
-                    (void)expander{(reg_test(Types{}, Catch::NameAndTags{ Name 
" - " + std::string(tmpl_types[index]), Tags } ), index++, 0)... };/* NOLINT */ 
\
+                    (void)expander{(reg_test(Types{}, Catch::NameAndTags{ Name 
" - " + std::string(tmpl_types[index]), Tags } ), index++)... };/* NOLINT */ \
                 }\
             };\
             static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
@@ -1151,7 +1142,7 @@
                     constexpr char const* tmpl_types[] = 
{CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, 
INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
                     constexpr char const* types_list[] = 
{CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, 
INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
                     constexpr auto num_types = sizeof(types_list) / 
sizeof(types_list[0]);\
-                    (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestFuncName<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), 
Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + 
"<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++, 
0)... };/* NOLINT */\
+                    (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestFuncName<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), 
Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + 
"<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++)... 
};/* NOLINT */\
                 }                                                     \
             };                                                        \
             static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){ \
@@ -1195,7 +1186,7 @@
             void reg_tests() {                                          \
                 int index = 0;                                    \
                 using expander = int[];                           \
-                (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestFunc<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), 
Catch::NameAndTags{ Name " - " + 
std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + 
std::to_string(index), Tags } ), index++, 0)... };/* NOLINT */\
+                (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestFunc<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), 
Catch::NameAndTags{ Name " - " + 
std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + 
std::to_string(index), Tags } ), index++)... };/* NOLINT */\
             }                                                     \
         };\
         static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){ \
@@ -1229,7 +1220,7 @@
                     int index = 0;                                    \
                     constexpr char const* tmpl_types[] = 
{CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, __VA_ARGS__)};\
                     using expander = int[];\
-                    (void)expander{(reg_test(Types{}, #ClassName, 
Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index]), Tags } ), 
index++, 0)... };/* NOLINT */ \
+                    (void)expander{(reg_test(Types{}, #ClassName, 
Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index]), Tags } ), 
index++)... };/* NOLINT */ \
                 }\
             };\
             static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
@@ -1278,7 +1269,7 @@
                     constexpr char const* tmpl_types[] = 
{CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, 
INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
                     constexpr char const* types_list[] = 
{CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, 
INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
                     constexpr auto num_types = sizeof(types_list) / 
sizeof(types_list[0]);\
-                    (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, 
Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + 
"<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++, 
0)... };/* NOLINT */ \
+                    (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, 
Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + 
"<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++)... 
};/* NOLINT */ \
                 }\
             };\
             static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
@@ -1325,7 +1316,7 @@
                 void reg_tests(){\
                     int index = 0;\
                     using expander = int[];\
-                    (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, 
Catch::NameAndTags{ Name " - " + 
std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + 
std::to_string(index), Tags } ), index++, 0)... };/* NOLINT */ \
+                    (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( 
&TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, 
Catch::NameAndTags{ Name " - " + 
std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + 
std::to_string(index), Tags } ), index++)... };/* NOLINT */ \
                 }\
             };\
             static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
@@ -1829,8 +1820,8 @@
 #endif
 
     namespace Detail {
-        template<typename InputIterator>
-        std::string rangeToString(InputIterator first, InputIterator last) {
+        template<typename InputIterator, typename Sentinel = InputIterator>
+        std::string rangeToString(InputIterator first, Sentinel last) {
             ReusableStringStream rss;
             rss << "{ ";
             if (first != last) {
@@ -7611,6 +7602,10 @@
 
         void addInitialFilters( std::vector<std::string> const& filters );
         void addNextFilters( std::vector<std::string> const& filters );
+        //! Returns filters active in this tracker
+        std::vector<std::string> const& getFilters() const;
+        //! Returns whitespace-trimmed name of the tracked section
+        std::string const& trimmedName() const;
     };
 
 } // namespace TestCaseTracking
@@ -12042,7 +12037,7 @@
         if (tmpnam_s(m_buffer)) {
             CATCH_RUNTIME_ERROR("Could not get a temp filename");
         }
-        if (fopen_s(&m_file, m_buffer, "w")) {
+        if (fopen_s(&m_file, m_buffer, "w+")) {
             char buffer[100];
             if (strerror_s(buffer, errno)) {
                 CATCH_RUNTIME_ERROR("Could not translate errno to a string");
@@ -12580,13 +12575,53 @@
                 // `SECTION`s.
                 // **The check for m_children.empty cannot be removed**.
                 // doing so would break `GENERATE` _not_ followed by 
`SECTION`s.
-                const bool should_wait_for_child =
-                    !m_children.empty() &&
-                    std::find_if( m_children.begin(),
-                                  m_children.end(),
-                                  []( TestCaseTracking::ITrackerPtr tracker ) {
-                                      return tracker->hasStarted();
-                                  } ) == m_children.end();
+                const bool should_wait_for_child = [&]() {
+                    // No children -> nobody to wait for
+                    if ( m_children.empty() ) {
+                        return false;
+                    }
+                    // If at least one child started executing, don't wait
+                    if ( std::find_if(
+                             m_children.begin(),
+                             m_children.end(),
+                             []( TestCaseTracking::ITrackerPtr tracker ) {
+                                 return tracker->hasStarted();
+                             } ) != m_children.end() ) {
+                        return false;
+                    }
+
+                    // No children have started. We need to check if they _can_
+                    // start, and thus we should wait for them, or they cannot
+                    // start (due to filters), and we shouldn't wait for them
+                    auto* parent = m_parent;
+                    // This is safe: there is always at least one section
+                    // tracker in a test case tracking tree
+                    while ( !parent->isSectionTracker() ) {
+                        parent = &( parent->parent() );
+                    }
+                    assert( parent &&
+                            "Missing root (test case) level section" );
+
+                    auto const& parentSection =
+                        static_cast<SectionTracker&>( *parent );
+                    auto const& filters = parentSection.getFilters();
+                    // No filters -> no restrictions on running sections
+                    if ( filters.empty() ) {
+                        return true;
+                    }
+
+                    for ( auto const& child : m_children ) {
+                        if ( child->isSectionTracker() &&
+                             std::find( filters.begin(),
+                                        filters.end(),
+                                        static_cast<SectionTracker&>( *child )
+                                            .trimmedName() ) !=
+                                 filters.end() ) {
+                            return true;
+                        }
+                    }
+                    return false;
+                }();
 
                 // This check is a bit tricky, because m_generator->next()
                 // has a side-effect, where it consumes generator's current
@@ -14091,10 +14126,10 @@
 
     namespace {
         struct TestHasher {
-            explicit TestHasher(Catch::SimplePcg32& rng) {
-                basis = rng();
+            explicit TestHasher(Catch::SimplePcg32& rng_instance) {
+                basis = rng_instance();
                 basis <<= 32;
-                basis |= rng();
+                basis |= rng_instance();
             }
 
             uint64_t basis;
@@ -14458,6 +14493,14 @@
             m_filters.insert( m_filters.end(), filters.begin()+1, 
filters.end() );
     }
 
+    std::vector<std::string> const& SectionTracker::getFilters() const {
+        return m_filters;
+    }
+
+    std::string const& SectionTracker::trimmedName() const {
+        return m_trimmed_name;
+    }
+
 } // namespace TestCaseTracking
 
 using TestCaseTracking::ITracker;
@@ -15192,6 +15235,41 @@
 // end catch_totals.cpp
 // start catch_uncaught_exceptions.cpp
 
+// start catch_config_uncaught_exceptions.hpp
+
+//              Copyright Catch2 Authors
+// Distributed under the Boost Software License, Version 1.0.
+//   (See accompanying file LICENSE_1_0.txt or copy at
+//        https://www.boost.org/LICENSE_1_0.txt)
+
+// SPDX-License-Identifier: BSL-1.0
+
+#ifndef CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP
+#define CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP
+
+#if defined(_MSC_VER)
+#  if _MSC_VER >= 1900 // Visual Studio 2015 or newer
+#    define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
+#  endif
+#endif
+
+#include <exception>
+
+#if defined(__cpp_lib_uncaught_exceptions) \
+    && !defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
+
+#  define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
+#endif // __cpp_lib_uncaught_exceptions
+
+#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
+
+#endif // CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP
+// end catch_config_uncaught_exceptions.hpp
 #include <exception>
 
 namespace Catch {
@@ -15238,7 +15316,7 @@
     }
 
     Version const& libraryVersion() {
-        static Version version( 2, 13, 0, "", 0 );
+        static Version version( 2, 13, 3, "", 0 );
         return version;
     }
 
_______________________________________________
openSUSE Commits mailing list -- commit@lists.opensuse.org
To unsubscribe, email commit-le...@lists.opensuse.org
List Netiquette: https://en.opensuse.org/openSUSE:Mailing_list_netiquette
List Archives: 
https://lists.opensuse.org/archives/list/commit@lists.opensuse.org

Reply via email to