From a18badd10fce6c3e087eef82699f371cf6f99fa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Fri, 8 May 2026 20:53:39 +0200 Subject: [PATCH] Workaround P3168 causing ambiguous overload issues with StringMaker P3168 turned `std::optional` into a range type, so the partial specialization of `StringMaker` for `std::optional` conflicted with the partial specialization for range types. Ideally we will fix this in the future to support user-provided partial specializations for range-like types, but for now we just disable the partial specialization for `std::optional` if P3168 is implemented. --- src/catch2/catch_tostring.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/catch2/catch_tostring.hpp b/src/catch2/catch_tostring.hpp index 16c4c496..e421b8b5 100644 --- a/src/catch2/catch_tostring.hpp +++ b/src/catch2/catch_tostring.hpp @@ -384,7 +384,10 @@ namespace Catch { } #endif // CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER -#if defined(CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER) && defined(CATCH_CONFIG_CPP17_OPTIONAL) +#if defined( CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER ) && \ + defined( CATCH_CONFIG_CPP17_OPTIONAL ) && \ + /* P3168 turned optional into a range, making this ambigous with the range support */ \ + !defined( __cpp_lib_optional_range_support ) #include namespace Catch { template