From 42132fb96b2eb712f828b28ad1d142dd8a2c6c1b Mon Sep 17 00:00:00 2001
From: jarzec <jarek.glowacki@gmail.com>
Date: Sun, 16 Feb 2025 14:54:22 +0100
Subject: [PATCH] CI Update regression tests after recent mods

---
 .../pure2-type-safety-1.cpp.execution                 |  2 ++
 .../mixed-bounds-check.cpp.execution                  |  2 +-
 .../mixed-bounds-safety-with-assert.cpp.execution     |  2 +-
 ...lization-safety-3-contract-violation.cpp.execution |  2 +-
 ...d-lifetime-safety-and-null-contracts.cpp.execution |  2 +-
 .../pure2-assert-expected-not-null.cpp.execution      |  2 +-
 .../pure2-assert-optional-not-null.cpp.execution      |  2 +-
 .../pure2-assert-shared-ptr-not-null.cpp.execution    |  2 +-
 .../pure2-assert-unique-ptr-not-null.cpp.execution    |  2 +-
 .../pure2-regex-general.cpp.execution                 | 11 +++++++++++
 .../pure2-regex_04_start_end.cpp.execution            |  1 +
 .../pure2-regex_19_lookahead.cpp.execution            | 10 ++++++++++
 .../pure2-regex_21_atomic_patterns.cpp.execution      |  8 ++++++++
 .../pure2-type-safety-1.cpp.execution                 |  2 ++
 .../pure2-type-safety-1.cpp.execution                 |  2 ++
 .../clang-15-c++20/mixed-bounds-check.cpp.execution   |  2 +-
 .../mixed-bounds-safety-with-assert.cpp.execution     |  2 +-
 ...lization-safety-3-contract-violation.cpp.execution |  2 +-
 ...d-lifetime-safety-and-null-contracts.cpp.execution |  2 +-
 .../pure2-assert-optional-not-null.cpp.execution      |  2 +-
 .../pure2-assert-shared-ptr-not-null.cpp.execution    |  2 +-
 .../pure2-assert-unique-ptr-not-null.cpp.execution    |  2 +-
 .../clang-15-c++20/pure2-type-safety-1.cpp.execution  |  2 ++
 .../clang-18-c++20/pure2-type-safety-1.cpp.execution  |  2 ++
 .../pure2-regex_04_start_end.cpp.execution            |  1 +
 .../pure2-regex_19_lookahead.cpp.execution            | 10 ++++++++++
 .../pure2-regex_21_atomic_patterns.cpp.execution      |  8 ++++++++
 .../pure2-type-safety-1.cpp.execution                 |  2 ++
 .../gcc-13-c++2b/pure2-type-safety-1.cpp.execution    |  2 ++
 .../pure2-assert-expected-not-null.cpp.output         |  4 ++--
 .../msvc-2022-c++20/pure2-type-safety-1.cpp.execution |  2 ++
 31 files changed, 82 insertions(+), 17 deletions(-)
 create mode 100644 regression-tests/test-results/apple-clang-15-c++2b/pure2-regex-general.cpp.execution
 create mode 100644 regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_21_atomic_patterns.cpp.execution
 create mode 100644 regression-tests/test-results/clang-18-c++23-libcpp/pure2-regex_21_atomic_patterns.cpp.execution

diff --git a/regression-tests/test-results/apple-clang-14-c++2b/pure2-type-safety-1.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-type-safety-1.cpp.execution
index d1aa6265a7..df9d257d3c 100644
--- a/regression-tests/test-results/apple-clang-14-c++2b/pure2-type-safety-1.cpp.execution
+++ b/regression-tests/test-results/apple-clang-14-c++2b/pure2-type-safety-1.cpp.execution
@@ -7,3 +7,5 @@
       variant<int, int, double> is int? true
                             any is int? true
                   optional<int> is int? true
+optional<int> is: int 
+optional<*D> is: *B *D 
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/mixed-bounds-check.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/mixed-bounds-check.cpp.execution
index 82030b2e63..3a3b2c0b7d 100644
--- a/regression-tests/test-results/apple-clang-15-c++2b/mixed-bounds-check.cpp.execution
+++ b/regression-tests/test-results/apple-clang-15-c++2b/mixed-bounds-check.cpp.execution
@@ -1 +1 @@
-../../../include/cpp2util.h(1156) decltype(auto) cpp2::impl::assert_in_bounds(auto &&, std::source_location) [arg = 5, x:auto = std::vector<int>]: Bounds safety violation: out of bounds access attempt detected - attempted access at index 5, [min,max] range is [0,4]
+../../../include/cpp2util.h(1235) decltype(auto) cpp2::impl::assert_in_bounds(auto &&, std::source_location) [arg = 5, x:auto = std::vector<int>]: Bounds safety violation: out of bounds access attempt detected - attempted access at index 5, [min,max] range is [0,4]
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/mixed-bounds-safety-with-assert.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/mixed-bounds-safety-with-assert.cpp.execution
index f2d99f3cf7..8ffc60ff34 100644
--- a/regression-tests/test-results/apple-clang-15-c++2b/mixed-bounds-safety-with-assert.cpp.execution
+++ b/regression-tests/test-results/apple-clang-15-c++2b/mixed-bounds-safety-with-assert.cpp.execution
@@ -1 +1 @@
-../../../include/cpp2util.h(965) : Bounds safety violation
+../../../include/cpp2util.h(546) : Bounds safety violation
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/mixed-initialization-safety-3-contract-violation.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/mixed-initialization-safety-3-contract-violation.cpp.execution
index 737e679f9c..f9c4f143cd 100644
--- a/regression-tests/test-results/apple-clang-15-c++2b/mixed-initialization-safety-3-contract-violation.cpp.execution
+++ b/regression-tests/test-results/apple-clang-15-c++2b/mixed-initialization-safety-3-contract-violation.cpp.execution
@@ -1 +1 @@
-../../../include/cpp2util.h(965) : Contract violation: fill: value must contain at least count elements
+../../../include/cpp2util.h(546) : Contract violation: fill: value must contain at least count elements
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/mixed-lifetime-safety-and-null-contracts.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/mixed-lifetime-safety-and-null-contracts.cpp.execution
index 4b83f34a45..f41e173fb6 100644
--- a/regression-tests/test-results/apple-clang-15-c++2b/mixed-lifetime-safety-and-null-contracts.cpp.execution
+++ b/regression-tests/test-results/apple-clang-15-c++2b/mixed-lifetime-safety-and-null-contracts.cpp.execution
@@ -1,2 +1,2 @@
 sending error to my framework... [dynamic null dereference attempt detected]
-from source location: ../../../include/cpp2util.h(1047) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = int *&]
+from source location: ../../../include/cpp2util.h(1126) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = int *&]
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-expected-not-null.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-expected-not-null.cpp.execution
index a8c48f53cc..6427da0635 100644
--- a/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-expected-not-null.cpp.execution
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-expected-not-null.cpp.execution
@@ -1 +1 @@
-../../../include/cpp2util.h(1047) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = std::expected<int, bool>]: Null safety violation: std::expected has an unexpected value
+../../../include/cpp2util.h(1126) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = std::expected<int, bool>]: Null safety violation: std::expected has an unexpected value
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-optional-not-null.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-optional-not-null.cpp.execution
index a31e19be3d..34a7e1af0a 100644
--- a/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-optional-not-null.cpp.execution
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-optional-not-null.cpp.execution
@@ -1 +1 @@
-../../../include/cpp2util.h(1047) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = std::optional<int>]: Null safety violation: std::optional does not contain a value
+../../../include/cpp2util.h(1126) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = std::optional<int>]: Null safety violation: std::optional does not contain a value
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-shared-ptr-not-null.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-shared-ptr-not-null.cpp.execution
index 4f27b06a21..4c2e845abe 100644
--- a/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-shared-ptr-not-null.cpp.execution
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-shared-ptr-not-null.cpp.execution
@@ -1 +1 @@
-../../../include/cpp2util.h(1047) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = std::shared_ptr<int>]: Null safety violation: std::shared_ptr is empty
+../../../include/cpp2util.h(1126) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = std::shared_ptr<int>]: Null safety violation: std::shared_ptr is empty
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-unique-ptr-not-null.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-unique-ptr-not-null.cpp.execution
index 93fbbe6f31..12e5bb1d9d 100644
--- a/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-unique-ptr-not-null.cpp.execution
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-assert-unique-ptr-not-null.cpp.execution
@@ -1 +1 @@
-../../../include/cpp2util.h(1047) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = std::unique_ptr<int>]: Null safety violation: std::unique_ptr is empty
+../../../include/cpp2util.h(1126) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = std::unique_ptr<int>]: Null safety violation: std::unique_ptr is empty
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex-general.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex-general.cpp.execution
new file mode 100644
index 0000000000..c44d084902
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex-general.cpp.execution
@@ -0,0 +1,11 @@
+Running tests_01_char_matcher:
+Not full match fails: 0
+Full match is ok:     1
+Search finds at position 1: 1
+Search finds at position 3: 3
+Find all finds at position: 1
+Find all finds at position: 4
+Find all finds at position: 7
+Find all found 3 matched: 3
+Find all finds at position: 2
+Find all found 1 match: 1
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_04_start_end.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_04_start_end.cpp.execution
index 6fef36434a..a1e2b9b631 100644
--- a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_04_start_end.cpp.execution
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_04_start_end.cpp.execution
@@ -8,4 +8,5 @@ Running tests_04_start_end:
 07_y: OK regex: ^ parsed_regex: ^ str: abc result_expr: $& expected_results 
 08_y: OK regex: $ parsed_regex: $ str: abc result_expr: $& expected_results 
 09_n: OK regex: $b parsed_regex: $b str: b result_expr: - expected_results -
+10_n: OK regex: \GX.*X parsed_regex: \GX.*X str: aaaXbX result_expr: - expected_results -
 
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_19_lookahead.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_19_lookahead.cpp.execution
index d4c65d951e..0f723eb774 100644
--- a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_19_lookahead.cpp.execution
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_19_lookahead.cpp.execution
@@ -27,6 +27,14 @@ Running tests_19_lookahead:
 26_y: OK regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) parsed_regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) str: aaaaaaaa result_expr: $1 expected_results aaaaaaa
 27_y: OK regex: a(?!b(?!c))(..) parsed_regex: a(?!b(?!c))(..) str: abababc result_expr: $1 expected_results bc
 28_y: OK regex: a(?!b(?=a))(..) parsed_regex: a(?!b(?=a))(..) str: abababc result_expr: $1 expected_results bc
+29_y: OK regex: (?=foo) parsed_regex: (?=foo) str: foo result_expr: @+ expected_results 0
+30_y: OK regex: (?=foo) parsed_regex: (?=foo) str: XfooY result_expr: @+ expected_results 1
+31_y: OK regex: .*(?=foo) parsed_regex: .*(?=foo) str: XfooY result_expr: @+ expected_results 1
+32_y: OK regex: (?=.*P)P parsed_regex: (?=.*P)P str: aP result_expr: @+ expected_results 2
+33_y: OK regex: X(?=foo)f parsed_regex: X(?=foo)f str: ..XfooY.. result_expr: @+ expected_results 4
+34_y: OK regex: X(?=foo) parsed_regex: X(?=foo) str: ..XfooY.. result_expr: @+ expected_results 3
+35_y: OK regex: (?=XY*foo) parsed_regex: (?=XY*foo) str: Xfoo result_expr: @+ expected_results 0
+36_y: OK regex: ^(?=XY*foo) parsed_regex: ^(?=XY*foo) str: Xfoo result_expr: @+ expected_results 0
 37_y: OK regex: X(\w+)(?=\s)|X(\w+) parsed_regex: X(\w+)(?=\s)|X(\w+) str: Xab result_expr: [$1-$2] expected_results [-ab]
 38_y: OK regex: ^a*(?=b)b parsed_regex: ^a*(?=b)b str: ab result_expr: $& expected_results ab
 39_y: OK regex: '(?!\A)x'm parsed_regex: '(?!\A)x'm str: a\nxb\n result_expr: - expected_results -
@@ -44,4 +52,6 @@ Running tests_19_lookahead:
 51_y: OK regex: ((?s)b.)c(?!\N) parsed_regex: ((?s)b.)c(?!\N) str: a\nb\nc\n result_expr: $1:$& expected_results b\n:b\nc
 52_y: OK regex: '(b.)c(?!\N)'s parsed_regex: '(b.)c(?!\N)'s str: a\nb\nc\n result_expr: $1:$& expected_results b\n:b\nc
 53_n: OK regex: a*(?!) parsed_regex: a*(?!) str: aaaab result_expr: - expected_results -
+54_y: OK regex: (?<bar>)foo parsed_regex: (?<bar>)foo str: bar>ABCfoo result_expr: $& expected_results foo
+55_y: OK regex: (?<bar>ABC)foo parsed_regex: (?<bar>ABC)foo str: bar>ABCfoo result_expr: $& expected_results ABCfoo
 
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_21_atomic_patterns.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_21_atomic_patterns.cpp.execution
new file mode 100644
index 0000000000..4812cfbb85
--- /dev/null
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-regex_21_atomic_patterns.cpp.execution
@@ -0,0 +1,8 @@
+Running tests_21_atomic_patterns:
+01_y: OK regex: (?>a+)b parsed_regex: (?>a+)b str: aaab result_expr: - expected_results -
+02_y: OK regex: ((?>a+)b) parsed_regex: ((?>a+)b) str: aaab result_expr: $1 expected_results aaab
+03_y: OK regex: (?>(a+))b parsed_regex: (?>(a+))b str: aaab result_expr: $1 expected_results aaa
+04_y: OK regex: ((?>[^()]+)|\([^()]*\))+ parsed_regex: ((?>[^()]+)|\([^()]*\))+ str: ((abc(ade)ufh()()x result_expr: $& expected_results abc(ade)ufh()()x
+05_y: OK regex: round\(((?>[^()]+))\) parsed_regex: round\(((?>[^()]+))\) str: _I(round(xs * sz),1) result_expr: $1 expected_results xs * sz
+06_y: OK regex: ^((?>(?:aa)?b)?) parsed_regex: ^((?>(?:aa)?b)?) str: aab result_expr: $1 expected_results aab
+
diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-type-safety-1.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-type-safety-1.cpp.execution
index d1aa6265a7..df9d257d3c 100644
--- a/regression-tests/test-results/apple-clang-15-c++2b/pure2-type-safety-1.cpp.execution
+++ b/regression-tests/test-results/apple-clang-15-c++2b/pure2-type-safety-1.cpp.execution
@@ -7,3 +7,5 @@
       variant<int, int, double> is int? true
                             any is int? true
                   optional<int> is int? true
+optional<int> is: int 
+optional<*D> is: *B *D 
diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-type-safety-1.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-type-safety-1.cpp.execution
index d1aa6265a7..df9d257d3c 100644
--- a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-type-safety-1.cpp.execution
+++ b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-type-safety-1.cpp.execution
@@ -7,3 +7,5 @@
       variant<int, int, double> is int? true
                             any is int? true
                   optional<int> is int? true
+optional<int> is: int 
+optional<*D> is: *B *D 
diff --git a/regression-tests/test-results/clang-15-c++20/mixed-bounds-check.cpp.execution b/regression-tests/test-results/clang-15-c++20/mixed-bounds-check.cpp.execution
index 82030b2e63..3a3b2c0b7d 100644
--- a/regression-tests/test-results/clang-15-c++20/mixed-bounds-check.cpp.execution
+++ b/regression-tests/test-results/clang-15-c++20/mixed-bounds-check.cpp.execution
@@ -1 +1 @@
-../../../include/cpp2util.h(1156) decltype(auto) cpp2::impl::assert_in_bounds(auto &&, std::source_location) [arg = 5, x:auto = std::vector<int>]: Bounds safety violation: out of bounds access attempt detected - attempted access at index 5, [min,max] range is [0,4]
+../../../include/cpp2util.h(1235) decltype(auto) cpp2::impl::assert_in_bounds(auto &&, std::source_location) [arg = 5, x:auto = std::vector<int>]: Bounds safety violation: out of bounds access attempt detected - attempted access at index 5, [min,max] range is [0,4]
diff --git a/regression-tests/test-results/clang-15-c++20/mixed-bounds-safety-with-assert.cpp.execution b/regression-tests/test-results/clang-15-c++20/mixed-bounds-safety-with-assert.cpp.execution
index f2d99f3cf7..8ffc60ff34 100644
--- a/regression-tests/test-results/clang-15-c++20/mixed-bounds-safety-with-assert.cpp.execution
+++ b/regression-tests/test-results/clang-15-c++20/mixed-bounds-safety-with-assert.cpp.execution
@@ -1 +1 @@
-../../../include/cpp2util.h(965) : Bounds safety violation
+../../../include/cpp2util.h(546) : Bounds safety violation
diff --git a/regression-tests/test-results/clang-15-c++20/mixed-initialization-safety-3-contract-violation.cpp.execution b/regression-tests/test-results/clang-15-c++20/mixed-initialization-safety-3-contract-violation.cpp.execution
index 737e679f9c..f9c4f143cd 100644
--- a/regression-tests/test-results/clang-15-c++20/mixed-initialization-safety-3-contract-violation.cpp.execution
+++ b/regression-tests/test-results/clang-15-c++20/mixed-initialization-safety-3-contract-violation.cpp.execution
@@ -1 +1 @@
-../../../include/cpp2util.h(965) : Contract violation: fill: value must contain at least count elements
+../../../include/cpp2util.h(546) : Contract violation: fill: value must contain at least count elements
diff --git a/regression-tests/test-results/clang-15-c++20/mixed-lifetime-safety-and-null-contracts.cpp.execution b/regression-tests/test-results/clang-15-c++20/mixed-lifetime-safety-and-null-contracts.cpp.execution
index 4b83f34a45..f41e173fb6 100644
--- a/regression-tests/test-results/clang-15-c++20/mixed-lifetime-safety-and-null-contracts.cpp.execution
+++ b/regression-tests/test-results/clang-15-c++20/mixed-lifetime-safety-and-null-contracts.cpp.execution
@@ -1,2 +1,2 @@
 sending error to my framework... [dynamic null dereference attempt detected]
-from source location: ../../../include/cpp2util.h(1047) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = int *&]
+from source location: ../../../include/cpp2util.h(1126) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = int *&]
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-assert-optional-not-null.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-assert-optional-not-null.cpp.execution
index a31e19be3d..34a7e1af0a 100644
--- a/regression-tests/test-results/clang-15-c++20/pure2-assert-optional-not-null.cpp.execution
+++ b/regression-tests/test-results/clang-15-c++20/pure2-assert-optional-not-null.cpp.execution
@@ -1 +1 @@
-../../../include/cpp2util.h(1047) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = std::optional<int>]: Null safety violation: std::optional does not contain a value
+../../../include/cpp2util.h(1126) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = std::optional<int>]: Null safety violation: std::optional does not contain a value
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-assert-shared-ptr-not-null.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-assert-shared-ptr-not-null.cpp.execution
index 4f27b06a21..4c2e845abe 100644
--- a/regression-tests/test-results/clang-15-c++20/pure2-assert-shared-ptr-not-null.cpp.execution
+++ b/regression-tests/test-results/clang-15-c++20/pure2-assert-shared-ptr-not-null.cpp.execution
@@ -1 +1 @@
-../../../include/cpp2util.h(1047) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = std::shared_ptr<int>]: Null safety violation: std::shared_ptr is empty
+../../../include/cpp2util.h(1126) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = std::shared_ptr<int>]: Null safety violation: std::shared_ptr is empty
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-assert-unique-ptr-not-null.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-assert-unique-ptr-not-null.cpp.execution
index 93fbbe6f31..12e5bb1d9d 100644
--- a/regression-tests/test-results/clang-15-c++20/pure2-assert-unique-ptr-not-null.cpp.execution
+++ b/regression-tests/test-results/clang-15-c++20/pure2-assert-unique-ptr-not-null.cpp.execution
@@ -1 +1 @@
-../../../include/cpp2util.h(1047) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = std::unique_ptr<int>]: Null safety violation: std::unique_ptr is empty
+../../../include/cpp2util.h(1126) decltype(auto) cpp2::impl::assert_not_null(auto &&, std::source_location) [arg:auto = std::unique_ptr<int>]: Null safety violation: std::unique_ptr is empty
diff --git a/regression-tests/test-results/clang-15-c++20/pure2-type-safety-1.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-type-safety-1.cpp.execution
index d1aa6265a7..df9d257d3c 100644
--- a/regression-tests/test-results/clang-15-c++20/pure2-type-safety-1.cpp.execution
+++ b/regression-tests/test-results/clang-15-c++20/pure2-type-safety-1.cpp.execution
@@ -7,3 +7,5 @@
       variant<int, int, double> is int? true
                             any is int? true
                   optional<int> is int? true
+optional<int> is: int 
+optional<*D> is: *B *D 
diff --git a/regression-tests/test-results/clang-18-c++20/pure2-type-safety-1.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-type-safety-1.cpp.execution
index d1aa6265a7..df9d257d3c 100644
--- a/regression-tests/test-results/clang-18-c++20/pure2-type-safety-1.cpp.execution
+++ b/regression-tests/test-results/clang-18-c++20/pure2-type-safety-1.cpp.execution
@@ -7,3 +7,5 @@
       variant<int, int, double> is int? true
                             any is int? true
                   optional<int> is int? true
+optional<int> is: int 
+optional<*D> is: *B *D 
diff --git a/regression-tests/test-results/clang-18-c++23-libcpp/pure2-regex_04_start_end.cpp.execution b/regression-tests/test-results/clang-18-c++23-libcpp/pure2-regex_04_start_end.cpp.execution
index 6fef36434a..a1e2b9b631 100644
--- a/regression-tests/test-results/clang-18-c++23-libcpp/pure2-regex_04_start_end.cpp.execution
+++ b/regression-tests/test-results/clang-18-c++23-libcpp/pure2-regex_04_start_end.cpp.execution
@@ -8,4 +8,5 @@ Running tests_04_start_end:
 07_y: OK regex: ^ parsed_regex: ^ str: abc result_expr: $& expected_results 
 08_y: OK regex: $ parsed_regex: $ str: abc result_expr: $& expected_results 
 09_n: OK regex: $b parsed_regex: $b str: b result_expr: - expected_results -
+10_n: OK regex: \GX.*X parsed_regex: \GX.*X str: aaaXbX result_expr: - expected_results -
 
diff --git a/regression-tests/test-results/clang-18-c++23-libcpp/pure2-regex_19_lookahead.cpp.execution b/regression-tests/test-results/clang-18-c++23-libcpp/pure2-regex_19_lookahead.cpp.execution
index d4c65d951e..0f723eb774 100644
--- a/regression-tests/test-results/clang-18-c++23-libcpp/pure2-regex_19_lookahead.cpp.execution
+++ b/regression-tests/test-results/clang-18-c++23-libcpp/pure2-regex_19_lookahead.cpp.execution
@@ -27,6 +27,14 @@ Running tests_19_lookahead:
 26_y: OK regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) parsed_regex: ^(a*?)(?!(aa|aaaa)*$)(?=a\z) str: aaaaaaaa result_expr: $1 expected_results aaaaaaa
 27_y: OK regex: a(?!b(?!c))(..) parsed_regex: a(?!b(?!c))(..) str: abababc result_expr: $1 expected_results bc
 28_y: OK regex: a(?!b(?=a))(..) parsed_regex: a(?!b(?=a))(..) str: abababc result_expr: $1 expected_results bc
+29_y: OK regex: (?=foo) parsed_regex: (?=foo) str: foo result_expr: @+ expected_results 0
+30_y: OK regex: (?=foo) parsed_regex: (?=foo) str: XfooY result_expr: @+ expected_results 1
+31_y: OK regex: .*(?=foo) parsed_regex: .*(?=foo) str: XfooY result_expr: @+ expected_results 1
+32_y: OK regex: (?=.*P)P parsed_regex: (?=.*P)P str: aP result_expr: @+ expected_results 2
+33_y: OK regex: X(?=foo)f parsed_regex: X(?=foo)f str: ..XfooY.. result_expr: @+ expected_results 4
+34_y: OK regex: X(?=foo) parsed_regex: X(?=foo) str: ..XfooY.. result_expr: @+ expected_results 3
+35_y: OK regex: (?=XY*foo) parsed_regex: (?=XY*foo) str: Xfoo result_expr: @+ expected_results 0
+36_y: OK regex: ^(?=XY*foo) parsed_regex: ^(?=XY*foo) str: Xfoo result_expr: @+ expected_results 0
 37_y: OK regex: X(\w+)(?=\s)|X(\w+) parsed_regex: X(\w+)(?=\s)|X(\w+) str: Xab result_expr: [$1-$2] expected_results [-ab]
 38_y: OK regex: ^a*(?=b)b parsed_regex: ^a*(?=b)b str: ab result_expr: $& expected_results ab
 39_y: OK regex: '(?!\A)x'm parsed_regex: '(?!\A)x'm str: a\nxb\n result_expr: - expected_results -
@@ -44,4 +52,6 @@ Running tests_19_lookahead:
 51_y: OK regex: ((?s)b.)c(?!\N) parsed_regex: ((?s)b.)c(?!\N) str: a\nb\nc\n result_expr: $1:$& expected_results b\n:b\nc
 52_y: OK regex: '(b.)c(?!\N)'s parsed_regex: '(b.)c(?!\N)'s str: a\nb\nc\n result_expr: $1:$& expected_results b\n:b\nc
 53_n: OK regex: a*(?!) parsed_regex: a*(?!) str: aaaab result_expr: - expected_results -
+54_y: OK regex: (?<bar>)foo parsed_regex: (?<bar>)foo str: bar>ABCfoo result_expr: $& expected_results foo
+55_y: OK regex: (?<bar>ABC)foo parsed_regex: (?<bar>ABC)foo str: bar>ABCfoo result_expr: $& expected_results ABCfoo
 
diff --git a/regression-tests/test-results/clang-18-c++23-libcpp/pure2-regex_21_atomic_patterns.cpp.execution b/regression-tests/test-results/clang-18-c++23-libcpp/pure2-regex_21_atomic_patterns.cpp.execution
new file mode 100644
index 0000000000..4812cfbb85
--- /dev/null
+++ b/regression-tests/test-results/clang-18-c++23-libcpp/pure2-regex_21_atomic_patterns.cpp.execution
@@ -0,0 +1,8 @@
+Running tests_21_atomic_patterns:
+01_y: OK regex: (?>a+)b parsed_regex: (?>a+)b str: aaab result_expr: - expected_results -
+02_y: OK regex: ((?>a+)b) parsed_regex: ((?>a+)b) str: aaab result_expr: $1 expected_results aaab
+03_y: OK regex: (?>(a+))b parsed_regex: (?>(a+))b str: aaab result_expr: $1 expected_results aaa
+04_y: OK regex: ((?>[^()]+)|\([^()]*\))+ parsed_regex: ((?>[^()]+)|\([^()]*\))+ str: ((abc(ade)ufh()()x result_expr: $& expected_results abc(ade)ufh()()x
+05_y: OK regex: round\(((?>[^()]+))\) parsed_regex: round\(((?>[^()]+))\) str: _I(round(xs * sz),1) result_expr: $1 expected_results xs * sz
+06_y: OK regex: ^((?>(?:aa)?b)?) parsed_regex: ^((?>(?:aa)?b)?) str: aab result_expr: $1 expected_results aab
+
diff --git a/regression-tests/test-results/clang-18-c++23-libcpp/pure2-type-safety-1.cpp.execution b/regression-tests/test-results/clang-18-c++23-libcpp/pure2-type-safety-1.cpp.execution
index d1aa6265a7..df9d257d3c 100644
--- a/regression-tests/test-results/clang-18-c++23-libcpp/pure2-type-safety-1.cpp.execution
+++ b/regression-tests/test-results/clang-18-c++23-libcpp/pure2-type-safety-1.cpp.execution
@@ -7,3 +7,5 @@
       variant<int, int, double> is int? true
                             any is int? true
                   optional<int> is int? true
+optional<int> is: int 
+optional<*D> is: *B *D 
diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-type-safety-1.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-type-safety-1.cpp.execution
index d1aa6265a7..df9d257d3c 100644
--- a/regression-tests/test-results/gcc-13-c++2b/pure2-type-safety-1.cpp.execution
+++ b/regression-tests/test-results/gcc-13-c++2b/pure2-type-safety-1.cpp.execution
@@ -7,3 +7,5 @@
       variant<int, int, double> is int? true
                             any is int? true
                   optional<int> is int? true
+optional<int> is: int 
+optional<*D> is: *B *D 
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-assert-expected-not-null.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-assert-expected-not-null.cpp.output
index cf2fc880c6..cf37d589aa 100644
--- a/regression-tests/test-results/msvc-2022-c++20/pure2-assert-expected-not-null.cpp.output
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-assert-expected-not-null.cpp.output
@@ -6,7 +6,7 @@ pure2-assert-expected-not-null.cpp2(7): error C2143: syntax error: missing ';' b
 pure2-assert-expected-not-null.cpp2(7): error C2143: syntax error: missing ';' before '}'
 pure2-assert-expected-not-null.cpp2(9): error C2065: 'ex': undeclared identifier
 pure2-assert-expected-not-null.cpp2(9): error C2672: 'cpp2::impl::assert_not_null': no matching overloaded function found
-..\..\..\include\cpp2util.h(1047): note: could be 'decltype(auto) cpp2::impl::assert_not_null(_T0 &&,std::source_location)'
+..\..\..\include\cpp2util.h(1126): note: could be 'decltype(auto) cpp2::impl::assert_not_null(_T0 &&,std::source_location)'
 pure2-assert-expected-not-null.cpp2(14): error C2039: 'expected': is not a member of 'std'
 predefined C++ types (compiler internal)(357): note: see declaration of 'std'
 pure2-assert-expected-not-null.cpp2(14): error C2062: type 'int' unexpected
@@ -19,4 +19,4 @@ pure2-assert-expected-not-null.cpp2(14): note: while trying to match the argumen
 pure2-assert-expected-not-null.cpp2(14): error C2143: syntax error: missing ';' before '}'
 pure2-assert-expected-not-null.cpp2(15): error C2065: 'ex': undeclared identifier
 pure2-assert-expected-not-null.cpp2(15): error C2672: 'cpp2::impl::assert_not_null': no matching overloaded function found
-..\..\..\include\cpp2util.h(1047): note: could be 'decltype(auto) cpp2::impl::assert_not_null(_T0 &&,std::source_location)'
+..\..\..\include\cpp2util.h(1126): note: could be 'decltype(auto) cpp2::impl::assert_not_null(_T0 &&,std::source_location)'
diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-type-safety-1.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-type-safety-1.cpp.execution
index d1aa6265a7..df9d257d3c 100644
--- a/regression-tests/test-results/msvc-2022-c++20/pure2-type-safety-1.cpp.execution
+++ b/regression-tests/test-results/msvc-2022-c++20/pure2-type-safety-1.cpp.execution
@@ -7,3 +7,5 @@
       variant<int, int, double> is int? true
                             any is int? true
                   optional<int> is int? true
+optional<int> is: int 
+optional<*D> is: *B *D