Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 10 additions & 19 deletions stl/inc/algorithm
Original file line number Diff line number Diff line change
Expand Up @@ -638,7 +638,7 @@ _NODISCARD pair<_FwdIt1, _FwdIt2> mismatch(

#ifdef __cpp_lib_concepts
namespace ranges {
template <input_iterator _It1, input_iterator _It2, integral _Size, class _Pr, class _Pj1, class _Pj2>
template <input_iterator _It1, input_iterator _It2, _Integer_like _Size, class _Pr, class _Pj1, class _Pj2>
requires indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>
_NODISCARD constexpr bool _Equal_count(
_It1 _First1, _It2 _First2, _Size _Count, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {
Expand Down Expand Up @@ -6923,9 +6923,7 @@ namespace ranges {
const auto _Count = _RANGES distance(_Range);
auto _UResult =
_RANGES _Lower_bound_unchecked(_Ubegin(_Range), _Count, _Val, _Pass_fn(_Pred), _Pass_fn(_Proj));
auto _Result = _RANGES begin(_Range);
_Seek_wrapped(_Result, _STD move(_UResult));
return _Result;
return _Rewrap_iterator(_Range, _STD move(_UResult));
}
};

Expand Down Expand Up @@ -6978,9 +6976,7 @@ namespace ranges {
const auto _Count = _RANGES distance(_Range);
auto _UResult =
_RANGES _Upper_bound_unchecked(_Ubegin(_Range), _Count, _Val, _Pass_fn(_Pred), _Pass_fn(_Proj));
auto _Result = _RANGES begin(_Range);
_Seek_wrapped(_Result, _STD move(_UResult));
return _Result;
return _Rewrap_iterator(_Range, _STD move(_UResult));
}
};

Expand Down Expand Up @@ -9924,13 +9920,10 @@ namespace ranges {
indirect_strict_weak_order<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>
_NODISCARD constexpr minmax_element_result<borrowed_iterator_t<_Rng>> operator()(
_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) const {
auto _First = _RANGES begin(_Range);
auto _UResult = _Minmax_element_fwd_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)),
_RANGES _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));
_STD _Seek_wrapped(_First, _STD move(_UResult.min));
auto _Second = _First;
_STD _Seek_wrapped(_Second, _STD move(_UResult.max));
return {_STD move(_First), _STD move(_Second)};
auto _UResult = _Minmax_element_fwd_unchecked(
_RANGES _Ubegin(_Range), _RANGES _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));
return {
_Rewrap_iterator(_Range, _STD move(_UResult.min)), _Rewrap_iterator(_Range, _STD move(_UResult.max))};
}

private:
Expand Down Expand Up @@ -10519,11 +10512,9 @@ namespace ranges {
template <forward_range _Rng, class _Pj = identity,
indirect_strict_weak_order<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>
_NODISCARD constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) const {
auto _First = _RANGES begin(_Range);
auto _UFirst = _RANGES _Is_sorted_until_unchecked(
_Unwrap_range_iter<_Rng>(_First), _Uend(_Range), _Pass_fn(_Pred), _Pass_fn(_Proj));
_Seek_wrapped(_First, _STD move(_UFirst));
return _First;
auto _UResult =
_RANGES _Is_sorted_until_unchecked(_Ubegin(_Range), _Uend(_Range), _Pass_fn(_Pred), _Pass_fn(_Proj));
return _Rewrap_iterator(_Range, _STD move(_UResult));
}
};

Expand Down
2 changes: 0 additions & 2 deletions stl/inc/ranges
Original file line number Diff line number Diff line change
Expand Up @@ -6682,7 +6682,6 @@ namespace ranges {
}
#endif // _ITERATOR_DEBUG_LEVEL != 0

// Per to-be-filed LWG issue (See GH-2995)
if constexpr (sized_sentinel_for<_Base_sentinel, _Base_iterator>) {
_Missing = _RANGES advance(_Current, _Count * _Off, _End);
} else {
Expand Down Expand Up @@ -7642,7 +7641,6 @@ namespace ranges {
}
#endif // _ITERATOR_DEBUG_LEVEL != 0

// Per to-be-filed LWG issue (See GH-2995)
if constexpr (sized_sentinel_for<_Base_sentinel, _Base_iterator>) {
_Missing = _RANGES advance(_Current, _Stride * _Off, _End);
} else {
Expand Down
2 changes: 1 addition & 1 deletion stl/inc/regex
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ _STL_DISABLE_CLANG_WARNINGS

_STD_BEGIN

enum _Meta_type { // meta character representations for parser
enum _Meta_type : int { // meta character representations for parser
_Meta_lpar = '(',
_Meta_rpar = ')',
_Meta_dlr = '$',
Expand Down
22 changes: 17 additions & 5 deletions stl/inc/sstream
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,12 @@ public:
const basic_string<_Elem, _Traits, _Alloc2>& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out)
: basic_stringbuf(_Str, _Mode, _Alloc{}) {}

basic_stringbuf(basic_stringbuf&& _Right, const _Alloc& _Al_) : _Al(_Al_) {
basic_stringbuf(basic_stringbuf&& _Right, const _Alloc& _Al_) : _Mystate(0), _Al(_Al_) {
_Assign_rv(_STD move(_Right));
}
#endif // _HAS_CXX20

basic_stringbuf(basic_stringbuf&& _Right) {
basic_stringbuf(basic_stringbuf&& _Right) : _Mystate(0) {
_Assign_rv(_STD move(_Right));
}

Expand Down Expand Up @@ -269,7 +269,7 @@ protected:

_Mysb::setp(_Newptr, _New_pnext, _Newptr + _Newsize);
if (_Mystate & _Noread) { // maintain eback() == allocated pointer invariant
_Mysb::setg(_Newptr, nullptr, _Newptr);
_Mysb::setg(_Newptr, _Newptr, _Newptr);
} else { // if readable, set the get area to initialized region
_Mysb::setg(_Newptr, _Newptr + (_Mysb::gptr() - _Oldptr), _Seekhigh);
}
Expand Down Expand Up @@ -328,6 +328,12 @@ protected:

pos_type seekoff(
off_type _Off, ios_base::seekdir _Way, ios_base::openmode _Mode = ios_base::in | ios_base::out) override {
const bool _Need_read_but_cannot = (_Mode & ios_base::in) != 0 && (_Mystate & _Noread) != 0;
const bool _Need_write_but_cannot = (_Mode & ios_base::out) != 0 && (_Mystate & _Constant) != 0;
if (_Need_read_but_cannot || _Need_write_but_cannot) {
return pos_type{off_type{-1}};
}

// change position by _Off, according to _Way, _Mode
const auto _Gptr_old = _Mysb::gptr();
const auto _Pptr_old = (_Mystate & _Constant) ? nullptr : _Mysb::pptr();
Expand Down Expand Up @@ -388,6 +394,12 @@ protected:
}

pos_type seekpos(pos_type _Pos, ios_base::openmode _Mode = ios_base::in | ios_base::out) override {
const bool _Need_read_but_cannot = (_Mode & ios_base::in) != 0 && (_Mystate & _Noread) != 0;
const bool _Need_write_but_cannot = (_Mode & ios_base::out) != 0 && (_Mystate & _Constant) != 0;
if (_Need_read_but_cannot || _Need_write_but_cannot) {
return pos_type{off_type{-1}};
}

// change position to _Pos, according to _Mode
const auto _Off = static_cast<streamoff>(_Pos);
const auto _Gptr_old = _Mysb::gptr();
Expand Down Expand Up @@ -440,7 +452,7 @@ protected:
_Mysb::setp(_Pnew, (_State & (_Atend | _Append)) ? _Seekhigh : _Pnew, _Seekhigh);

if (_State & _Noread) { // maintain "_Allocated == eback() points to buffer base" invariant
_Mysb::setg(_Pnew, nullptr, _Pnew);
_Mysb::setg(_Pnew, _Pnew, _Pnew);
}
}

Expand Down Expand Up @@ -469,7 +481,7 @@ protected:

_Mysb::setp(_Pnew, _Next, _End_buffer);
if (_State & _Noread) { // maintain "_Allocated == eback() points to buffer base" invariant
_Mysb::setg(_Pnew, nullptr, _Pnew);
_Mysb::setg(_Pnew, _Pnew, _Pnew);
} else {
_Mysb::setg(_Pnew, _Pnew, _Seekhigh);
}
Expand Down
14 changes: 6 additions & 8 deletions stl/inc/xutility
Original file line number Diff line number Diff line change
Expand Up @@ -6683,10 +6683,9 @@ namespace ranges {
template <forward_range _Rng, class _Pj = identity,
indirect_strict_weak_order<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>
_NODISCARD constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) const {
auto _First = _RANGES begin(_Range);
_Seek_wrapped(_First, _RANGES _Max_element_unchecked(_Unwrap_range_iter<_Rng>(_STD move(_First)),
_Uend(_Range), _Pass_fn(_Pred), _Pass_fn(_Proj)));
return _First;
auto _UResult =
_RANGES _Max_element_unchecked(_Ubegin(_Range), _Uend(_Range), _Pass_fn(_Pred), _Pass_fn(_Proj));
return _Rewrap_iterator(_Range, _STD move(_UResult));
}
};

Expand Down Expand Up @@ -6878,10 +6877,9 @@ namespace ranges {
template <forward_range _Rng, class _Pj = identity,
indirect_strict_weak_order<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>
_NODISCARD constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) const {
auto _First = _RANGES begin(_Range);
_Seek_wrapped(_First, _RANGES _Min_element_unchecked(_Unwrap_range_iter<_Rng>(_STD move(_First)),
_Uend(_Range), _Pass_fn(_Pred), _Pass_fn(_Proj)));
return _First;
auto _UResult =
_RANGES _Min_element_unchecked(_Ubegin(_Range), _Uend(_Range), _Pass_fn(_Pred), _Pass_fn(_Proj));
return _Rewrap_iterator(_Range, _STD move(_UResult));
}
};

Expand Down
17 changes: 17 additions & 0 deletions tests/std/tests/P0896R4_istream_view/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,23 @@ void test_one_type() {
static_assert(noexcept(views::istream<T>(wintstream)));
assert(ranges::equal(input, expected_vals));
}
#if _HAS_CXX23
{ // Using ranges::istream_view with const iterators
istringstream intstream{"0 1 2 3"};
T input[] = {-1, -1, -1, -1, -1};
ranges::istream_view<T> v(intstream);
ranges::copy(v.cbegin(), v.cend(), input);
assert(ranges::equal(input, expected_vals));
}

{ // Using ranges::wistream_view with const iterators
wistringstream wintstream{L"0 1 2 3"};
T input[] = {-1, -1, -1, -1, -1};
ranges::wistream_view<T> v(wintstream);
ranges::copy(v.cbegin(), v.cend(), input);
assert(ranges::equal(input, expected_vals));
}
#endif // _HAS_CXX23
}

istringstream some_stream{"42"};
Expand Down
7 changes: 7 additions & 0 deletions tests/std/tests/P0896R4_ranges_alg_equal/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,13 @@ constexpr void smoke_test() {
assert(!equal(begin(arr1), unreachable_sentinel, begin(arr2), end(arr2)));
assert(!equal(begin(arr1), end(arr1), begin(arr2), unreachable_sentinel));
}
#ifndef _M_CEE // TRANSITION, VSO-1666180
{
// Validate GH-3550: "<ranges>: ranges::equal does not work for ranges with integer-class range_difference_t"
auto v = ranges::subrange{std::views::iota(0ull, 10ull)} | std::views::drop(2);
assert(equal(v, v));
}
#endif // _M_CEE
}

int main() {
Expand Down
13 changes: 11 additions & 2 deletions tests/std/tests/P0896R4_views_empty/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ constexpr bool test_one_type() {
static_assert(ranges::view<R> && ranges::contiguous_range<R> && ranges::sized_range<R> && ranges::common_range<R>);
static_assert(ranges::borrowed_range<R>);
static_assert(same_as<const R, decltype(views::empty<T>)>);
auto& r = views::empty<T>;
constexpr auto& r = views::empty<T>;

// validate member size
static_assert(same_as<decltype(R::size()), size_t>);
Expand Down Expand Up @@ -50,7 +50,16 @@ constexpr bool test_one_type() {
static_assert(noexcept(R::empty()));
static_assert(noexcept(ranges::empty(r)));

// validate members inherited from view_interface
#if _HAS_CXX23
// validate members cbegin and cend inherited from view_interface
static_assert(same_as<decltype(r.cbegin()), const_iterator<T*>>);
static_assert(r.cbegin() == nullptr);

static_assert(same_as<decltype(r.cend()), const_iterator<T*>>);
static_assert(r.cend() == nullptr);
#endif // _HAS_CXX23

// validate other members inherited from view_interface
assert(!r);

return true;
Expand Down
23 changes: 23 additions & 0 deletions tests/std/tests/P0896R4_views_iota/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,14 @@ constexpr void test_integral() {
static_assert(noexcept(first != last)); // strengthened
assert(last - first == 8);
static_assert(noexcept(last - first)); // strengthened

#if _HAS_CXX23
const same_as<ranges::const_iterator_t<R>> auto cfirst = rng.cbegin();
assert(cfirst == first);
const same_as<ranges::const_sentinel_t<R>> auto clast = rng.cend();
assert(clast == last);
assert(clast - cfirst == 8);
#endif // _HAS_CXX23
}

{
Expand Down Expand Up @@ -234,6 +242,21 @@ constexpr void test_integral() {
}

static_assert(!CanSize<ranges::iota_view<T>>);

#if _HAS_CXX23
{
const same_as<R> auto rng = views::iota(low);
const ranges::subrange crng{rng.cbegin(), rng.cend()};

auto i = low;
for (const auto& e : crng) {
assert(e == i);
if (++i == high) {
break;
}
}
}
#endif // _HAS_CXX23
}
}

Expand Down
17 changes: 17 additions & 0 deletions tests/std/tests/P0896R4_views_single/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,23 @@ constexpr bool test_one_type(T value, Args&&... args) {
static_assert(noexcept(cr0.end()));
static_assert(noexcept(ranges::end(cr0)));

#if _HAS_CXX23
// validate members cbegin and cend
static_assert(same_as<decltype(r0.cbegin()), const T*>);
assert(*r0.cbegin() == value);
assert(r0.cbegin() == ptr);

static_assert(same_as<decltype(r0.cend()), const T*>);
assert(r0.cend() == ptr + 1);

static_assert(same_as<decltype(cr0.cbegin()), const T*>);
assert(*cr0.cbegin() == value);
assert(cr0.cbegin() == cptr);

static_assert(same_as<decltype(cr0.cend()), const T*>);
assert(cr0.cend() == cptr + 1);
#endif // _HAS_CXX23

// validate CTAD and T&& constructor
const same_as<R> auto cr1 = ranges::single_view{move(value)};
assert(cr1.data() != nullptr);
Expand Down
10 changes: 10 additions & 0 deletions tests/std/tests/P2474R2_views_repeat/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,16 @@ constexpr void test_common(T val, B bound = unreachable_sentinel) {
assert(cmp_equal(last - first, rng.size()));
static_assert(noexcept(last - first)); // strengthened
}

const same_as<ranges::const_iterator_t<R>> auto cfirst = rng.cbegin();
assert(cfirst == first);
const same_as<ranges::const_sentinel_t<R>> auto clast = rng.cend();
if constexpr (ranges::common_range<R>) {
assert(clast == last);
assert(cmp_equal(clast - cfirst, rng.size()));
} else {
static_assert(same_as<remove_const_t<decltype(clast)>, unreachable_sentinel_t>);
}
}

struct move_tester {
Expand Down
1 change: 1 addition & 0 deletions tests/std/tests/char8_t_17_matrix.lst
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,4 @@ PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsin
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MDd /std:c++17"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++20 /permissive-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MTd /std:c++latest /permissive- /fp:strict"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++latest /permissive- /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined"
1 change: 1 addition & 0 deletions tests/std/tests/char8_t_impure_matrix.lst
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,4 @@ PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsin
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MDd /std:c++17"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++20 /permissive-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MTd /std:c++latest /permissive- /fp:strict"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++latest /permissive- /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined"
1 change: 1 addition & 0 deletions tests/std/tests/char8_t_matrix.lst
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,4 @@ PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsin
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MDd /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++20 /permissive- /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MTd /std:c++latest /permissive- /fp:strict /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++latest /permissive- /fp:strict /w14640 /Zc:threadSafeInit- -fsanitize=undefined -fno-sanitize-recover=undefined"
1 change: 1 addition & 0 deletions tests/std/tests/concepts_20_matrix.lst
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,4 @@ PM_CL="/clr /MDd /std:c++20"
# PM_CL="/std:c++latest /permissive- /BE /c /EHsc /MTd"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++20 /permissive- /MD"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /permissive- /MTd /fp:strict"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /permissive- /MT /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined"
1 change: 1 addition & 0 deletions tests/std/tests/concepts_latest_matrix.lst
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@ PM_CL="/MTd /D_ITERATOR_DEBUG_LEVEL=2 /permissive- /analyze:only /analyze:autolo
# PM_CL="/permissive- /BE /c /MTd"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MD"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MTd /fp:strict"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MT /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined"
1 change: 1 addition & 0 deletions tests/std/tests/impure_matrix.lst
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,4 @@ PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsin
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MDd /std:c++17"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++20 /permissive-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MTd /std:c++latest /permissive- /fp:strict"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++latest /permissive- /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined"
1 change: 1 addition & 0 deletions tests/std/tests/locale0_implib_cpp_matrix.lst
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,4 @@ PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsin
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MDd /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++20 /permissive- /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MTd /std:c++latest /permissive- /fp:strict /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++latest /permissive- /fp:strict /w14640 /Zc:threadSafeInit- -fsanitize=undefined -fno-sanitize-recover=undefined"
Loading