diff --git a/stl/inc/ranges b/stl/inc/ranges index cbb6a729bea..3ae0270bd0e 100644 --- a/stl/inc/ranges +++ b/stl/inc/ranges @@ -3068,6 +3068,19 @@ namespace ranges { requires view<_Vw> && input_range> class join_view : public _Join_view_base<_Vw> { // clang-format on + +#ifndef _USE_JOIN_VIEW_INPUT_RANGE + static_assert(forward_range<_Vw>, + "Due to a design flaw, join_view can misbehave " + "with some input-only ranges (see https://wg21.link/lwg3698). " + "We believe that WG21 will be unable to fix this problem without breaking ABI. " + "To minimize breakage when a fix is implemented, " + "we are temporarily disabling potentially problematic cases. " + "You can define _USE_JOIN_VIEW_INPUT_RANGE to suppress this diagnostic, " + "but be aware that you will almost certainly need to recompile " + "when we release a fix."); +#endif // _USE_JOIN_VIEW_INPUT_RANGE + private: template using _InnerRng = range_reference_t<_Maybe_const<_Const, _Vw>>; diff --git a/tests/libcxx/usual_matrix.lst b/tests/libcxx/usual_matrix.lst index 193320fdd4d..f80e837439c 100644 --- a/tests/libcxx/usual_matrix.lst +++ b/tests/libcxx/usual_matrix.lst @@ -4,7 +4,7 @@ RUNALL_INCLUDE ..\universal_prefix.lst RUNALL_CROSSLIST # TRANSITION, LLVM-53957: _SILENCE_ALL_CXX23_DEPRECATION_WARNINGS belongs to llvm-project/libcxx/test/support/msvc_stdlib_force_include.h -PM_CL="/EHsc /MTd /std:c++latest /permissive- /FImsvc_stdlib_force_include.h /wd4643 /D_STL_CALL_ABORT_INSTEAD_OF_INVALID_PARAMETER /D_SILENCE_ALL_CXX23_DEPRECATION_WARNINGS" +PM_CL="/EHsc /MTd /std:c++latest /permissive- /FImsvc_stdlib_force_include.h /wd4643 /D_STL_CALL_ABORT_INSTEAD_OF_INVALID_PARAMETER /D_SILENCE_ALL_CXX23_DEPRECATION_WARNINGS /D_USE_JOIN_VIEW_INPUT_RANGE" RUNALL_CROSSLIST PM_CL="/analyze:autolog- /Zc:preprocessor" PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing" diff --git a/tests/std/tests/P0896R4_views_join/test.cpp b/tests/std/tests/P0896R4_views_join/test.cpp index a52dfed7e57..bbc4dc03ba8 100644 --- a/tests/std/tests/P0896R4_views_join/test.cpp +++ b/tests/std/tests/P0896R4_views_join/test.cpp @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +#define _USE_JOIN_VIEW_INPUT_RANGE + #include #include #include