Граф коммитов

266 Коммитов

Автор SHA1 Сообщение Дата
Casey Carter 2849d9c39f
<concepts>: Implement is-default-initializable via placement new (#635)
`new T` is correctly ill-formed when `T` cannot be default-initialized (except on MSVC thanks to VSO-1084668).

Fixes #334.
2020-03-26 07:10:31 -07:00
Joyce Er 02043f812c
Remove comment following acceptance of LWG-3150 (#638)
Fixes #528.
2020-03-25 23:45:27 -07:00
WojciechMigda 603971feb8
Bump _MSVC_STL_UPDATE for March 2020 (#637)
Fixes #579.
2020-03-25 23:26:36 -07:00
Sven Haak 7a4d70ae96
<xutility>: strengthen noexcept for array iterators (#627)
Fixes #427.
2020-03-25 23:21:50 -07:00
Krystyna Lopez 6d88a8883e
Fix #239: Improve _Invoke_traits throughput (#408) 2020-03-25 23:14:14 -07:00
Curtis J Bezault 20f21b2248
Add tests using lit as a test harness (#520) 2020-03-25 13:56:03 -07:00
Billy O'Neal b75dd43d33
Add scripts to generate new Virtual Machine Scale Sets and images for build machines (#633) 2020-03-24 14:07:46 -07:00
Casey Carter 76d94b0c35
<filesystem>: Fix damage caused by redefinition of _Iter_value_t to iter_value_t in concepts mode (#631)
`iter_value_t` doesn't detour through `iterator_traits`, so it can be valid for non-iterator types. This breaks `_Is_Source2`, however, which expects `_Iter_value_t` to filter out non-iterator types.

Drive-by: rename `_Is_Source2` to `_Is_Source_impl` to be consistent with how we name trait helpers elsewhere.

Fixes DevCom-953628.
2020-03-24 13:16:22 -07:00
Curtis J Bezault 9915b312e7
Update dependencies for CI machines (#620) 2020-03-23 13:26:45 -07:00
Curtis J Bezault 6a25414c5a
Update devcrt to std in the README (#629) 2020-03-23 13:23:57 -07:00
Curtis J Bezault c5c422b1fc
Repoint the README to the changelog (#630) 2020-03-23 13:23:02 -07:00
Casey Carter 02a6ea8b62
Allow Clang10 in the STL (#622)
* Allow Clang10 in the STL

This PR includes changes necessary to allow (but not require) clang 10 in the STL. It also includes test changes to allow the tests to pass given new clang warnings for deprecated behaviors, and an update to the LLVM reference to get similar changes that have been applied upstream to libc++ tests.

Details:
* In `<compare>`, remove workarounds for LLVM-41991 in Clang 10 RC1 fixed in RC2.
* In `<concepts>`, remove `_SILENCE_CLANG_CONCEPTS_MESSAGE`.
* In `<queue>` and `<stack>`, befriend only corresponding specializations of operator templates.
* In `<system_error>`, fix the `__cpp_constexpr_dynamic_alloc` implementation of `_Immortalize_memcpy_image` (which we apparently didn't review at all).
* In `<experimental/filesystem>`, apply a fix equivalent to the resolution of LWG-3244.
* Update `P0220R1_optional` from upstream.
* In `P0595R2_is_constant_evaluated`, silence Clang's warning for using `is_constant_evaluated` in a manifestly constant-evaluated context.
* In `P0896R4_ranges_iterator_machinery`, fix bogus test cases that were expecting VSO-1008447, silence "unused variable" warnings, and avoid taking advantage of too-lenient MSVC comparison rewrite behavior.
* In `P0896R4_ranges_range_machinery`, silence "unused variable" warning.
* In `P0898R3_concepts`, Remove workaround for LLVM-44627 in Clang 10 RC1 fixed in RC2.
* In `VSO_0000000_type_traits` and `tr1/type_traits5`, silence volatile function parameter deprecation warnings.
* In `tr1/condition_variable`, `tr1/regex1`, and `tr1/regex3`, remove unnecessary copy assignment operators that were prompting Clang warnings about the implicitly definition of a copy constructor for such a class being deprecated.
* In `tr1/csetjmp`, silence volatile increment deprecation warnings.

Skip new libc++ tests:
* Various `span` tests that expect `const_iterator` (libc++ doesn't yet implement LWG-3320)
* tests for the implementation of P1135R6 "The C++ Synchronization Library" which we do not yet implement
2020-03-19 16:42:55 -07:00
Casey Carter 300e85650c
Remove STL workarounds for VSO-1006185 (#417)
* Remove STL workarounds for VSO-1006185

...which has been fixed for 16.6p1.

Fixes #416.
2020-03-17 22:23:37 -07:00
Billy O'Neal bf944d2e28
<filesystem> Treat ERROR_BAD_NETPATH as file not found. (#616)
Resolves GH-615 / DevCom-950424.

* Extract _Is_file_not_found to <xfilesystem_abi.h> as __std_is_file_not_found because we also need that in filesystem.cpp.
* Add ERROR_BAD_NETPATH to __std_is_file_not_found.
* Map ERROR_BAD_NETPATH to errc::no_such_file_or_directory.
* Change filesystem tests that look for file not exists behavior to also test bad network paths.
2020-03-17 18:29:50 -07:00
Stephan T. Lavavej e65b2aa6cd
Repair feature-test macros test. (#617)
* Now that the test uses `_HAS_CXX17` and `_HAS_CXX20`,
we need to include `<version>` at the very top.

* Fix damage to the `__cpp_rtti` test.

Additional cleanups:

* Capitalize "Clang" consistently.

* Sort prefixes like `__cpp_init_captures` before
`__cpp_initializer_lists`. This is lexicographic
('_' is less than '[a-z]') and matches the Standard's ordering.

* Remove `_M_CEE` comments for preprocessor directives. Earlier, we
decided that such systematic comments are unnecessarily noisy in this
test specifically, but these comments were simply missed.

* Remove inconsistent empty line.
2020-03-17 18:23:17 -07:00
Daniel Marshall 40bff7c881
<tests/std> Cleanup feature_test_macros/test.cpp (#603)
Reorder preprocessor chunks lexicographically and improve the error messages for incorrectly defined/undefined feature test macros.
2020-03-17 14:24:36 -07:00
Stephan T. Lavavej 4cce286cf4
Work around compiler bug in atomic. (#614) 2020-03-17 12:46:45 -07:00
Alex Guteniev 5f6b155001
Fix #608 : CMakeLists.txt: /O2 is not working (#610)
`VCLIBS_RELEASE_FLAGS` should be `VCLIBS_RELEASE_OPTIONS`.
2020-03-16 15:15:59 -07:00
pi1024e 32deb989fa
Simplify _FDscale in xfdscale.cpp (#609)
`psx` is `0`, so don't even bother checking.
2020-03-16 15:14:24 -07:00
Casey Carter 2ff4d3447b
P1871R1 disable_sized_sentinel_for (#607)
Rename the variable template `disable_sized_sentinel` to `disable_sized_sentinel_for` for consistency with the name of the associated concept `sized_sentinel_for`.

Addresses #39.
2020-03-16 13:10:19 -07:00
Casey Carter 285187b7b2
P0896R4 changes to insert iterators (#589)
When `defined(__cpp_lib_concepts)`, `(back_|front_|)insert_iterator` are default constructible, and have `ptrdiff_t` as difference type.

Skip libc++ tests broken by this change.
2020-03-09 17:45:17 -07:00
Stephan T. Lavavej 08ed0de1a6
Improve GitHub templates and VSCode config (#590) 2020-03-08 14:23:02 -07:00
Michael Schellenberger Costa d8b5008ea3
P2116R0 Removing tuple-Like Protocol Support From Fixed-Extent span (#587)
Fixes #556.
2020-03-08 14:16:29 -07:00
Daniel Marshall f2a03821e2
Add /build/ to .gitignore (#581) 2020-03-08 14:14:21 -07:00
Adam Bucior 26b06299b0
<xutility> lexicographical_compare_three_way (#515)
Works towards #64.
2020-03-08 14:07:08 -07:00
Michael Schellenberger Costa b3976d3921
LWG-3255 span's array constructor is too strict (#506)
Fixes #541.
2020-03-08 13:57:03 -07:00
Michael Schellenberger Costa 2af0749fc1
P1976R2 Explicit Constructors For Fixed-Extent span From Dynamic-Extent Ranges (#500)
Fixes #557.
2020-03-08 13:41:14 -07:00
Billy O'Neal 0d75fc5ab6
<functional> Avoid layers of forwards in invoke (#585)
This change removes the last "nonessential" stack frame that would be encountered for threads, and makes the debugging experience for several standard components, like `std::function`, nicer by not needing so many step into / step out of sequences.

![image](https://user-images.githubusercontent.com/1544943/75860992-92b2b000-5db1-11ea-90f1-d7ec3adde21b.png)

1. CRT's thread entry point
2. std::thread's entry point that staples the parameters on
3. invoke
4. already user code yay!

Hopefully this makes debug codegen better too, particularly now that ranges hammers invoke even harder than we used to.

I didn't change any of the metaprogramming for deciding which strategy to use -- I like that we don't use SFINAE to make that decision, and don't really consider myself competent enough a metaprogrammer to confidently make changes there. I just make `_Invoker_xyz` also supply a strategy value that is fed into `if constexpr`. @CaseyCarter suggested some larger changes which might have sped up metaprogramming I tried, but ran into issues because one can't deduce the calling convention of pointers-to-member-function.

I've also made a one time exception to our usual policy of using `std::forward` rather than `static_cast`, with the rationale that `invoke` is hammered *everywhere*, and also by traits, and we want the debugging experience of that to be as nice as possible.

(Also drive-by removed unnecessary compilation of iostreams from the `Dev10_729003_bind_reference_wrapper` I noticed debugging a test case failure)

Co-authored-by: Casey Carter <cartec69@gmail.com>
2020-03-05 15:36:26 -08:00
Charlie Barto 8a6c278743
add bit_cast and tests (#583)
* add bit_cast and tests
Mirror MSVC-PR-228495
2020-03-05 13:57:04 -08:00
Casey Carter b8917400a9
enable_view<T> now defaults to derived_from<T, view_base> (#588)
Implements LWG-3326 "`enable_view` has false positives".

Fixes #543.
2020-03-05 06:14:28 -08:00
Casey Carter 930b843f31
Several range algorithms (#565)
* Several range algorithms

In `<algorithm>`, implement:
* the generic algorithm result types from P2106R0 (lines 75-227)
* `ranges::for_each` and its result alias `for_each_result` (lines 289-322)
* `ranges::for_each_n` and its result alias `for_each_result_n` (lines 324-351) from P1243R4
* `ranges::find` (lines 353-384)
* `ranges::find_if` (lines 396-426)
* `ranges::find_if_not` (lines 454-484)
* `ranges::count` (lines 526-568)
* `ranges::count_if` (lines 587-617)
* `ranges::mismatch` and its result alias `mismatch_result` (lines 798-891)
* `ranges::equal` (lines 893-980)
* `ranges::all_of` (lines 1006-1033)
* `ranges::any_of` (lines 1060-1087)
* `ranges::none_of` (lines 1114-1141)
* `ranges::copy` and its result alias `copy_result` (lines 1143-1175)
* `ranges::copy_n` and its result alias `copy_n_result` (lines 1177-1207)
* `ranges::copy_if` and its result alias `copy_if_result` (lines 1262-1302)

In `<concepts>`:
* implement LWG-3194 which includes the resolution of LWG-3151 (lines 51-53)
* LWG-3175 has been merged, remove conditional implementation (line 183)
* replace `boolean` concept with _`boolean-testable`_ concept from P1964R2 (lines 198-237, 283)
* move `movable` (pun intended) into synopsis order (lines 254-256)
* Modify concept `copyable` per P2102R0 (lines 260-261)
* Implement concept `equivalence_relation` from P1716R3 (lines 290-293)

In `<xutility>`:
* promote `identity` from `<functional>` for visibility in `<algorithm>` (lines 160-168)
* promote `common_range` from `<ranges>` for visibility in `<algorithm>` (lines 3091-3095)
* remove LWG-3247 and LWG-3299 annotations (lines 622, 626, and 963)
* prefix `indirectly_` to the names of `readable_traits`, `readable`, and `writable` (a great many lines); and modify `iter_value_t` (lines 366-367), `iter_reference_t` (lines ), `iter_difference_t`, `iter_rvalue_reference_t`, `indirectly_readable` (lines 688-701) and `indirectly_swappable` per P1878R1
* define alias template `_Make_unsigned_like_t` to implement P1522R1's _`make-unsigned-like-t`_ (it does nothing interesting yet, since we provide no integer-class types) (lines 727-729)
* implement the "Indirect callable" concepts `indirectly_unary_invocable`, `indirectly_regular_unary_invocable`, `indirect_unary_predicate`, `indirect_binary_predicate`, `indirect_equivalence_relation`, `indirect_strict_weak_order`, and helpers `indirect_result_t` and `projected` (lines 852-926)
* implement `indirectly_copyable` and `indirectly_copyable_storable` concepts (lines 939-952)
* implement `indirectly_swappable`, `indirectly_comparable`, `permutable`, `mergeable`, and `sortable` concepts (lines 1032-1061)
* rename `safe_range` and `enable_safe_range` to `borrowed_range` and `enable_borrowed_range` per LWG-3379 (lines 2168-2173 and 2327-2330)
* remove "Implements D2091R0" comments (various lines in 2175-2710)
* add `ranges::data` to the list of access CPOs that hard error for arrays of incomplete element types (lines 2204-2205 and 2277-2278)
* `ranges::empty` rejects arrays of unbound bound per P2091R0 (lines 2664-2692)
* implement concept `_Not_same_as` (the exposition-only _`not-same-as`_ from the working draft) (lines 3087-3089)
* implement `ranges::dangling` (lines 3097-3102)
* implement `ranges::borrowed_iterator_t` (lines 3104-3106)

In `<yvals_core.h>`:
* Indicate implementation of:
  * P1207R4 Movability of Single-Pass Iterators
  * P1248R1 Fixing Relations
  * P1474R1 Helpful Pointers For contiguous_iterator
  * P1716R3 Range Comparison Algorithms Are Over-Constrained
  * P1878R1 Constraining Readable Types
  * P1964R2 Replacing `boolean` with _`boolean-testable`_
  * P2091R0 Fixing Issues With Range Access CPOs
  * P2102R0 Make "implicit expression variations" More Explicit
* and partial implementation of:
  * P1243R4 Rangify New Algorithms
* remove conditional definition of `_HAS_STD_BOOLEAN` (we never has `std::boolean` now)

`tests/std/include/instantiate_algorithms.hpp`:
* define non-movable type `Immobile`, and use it to ensure that standard algorithms neither copy nor move random number generators nor uniform random bit generators

Add header `tests/std/include/range_algorithm_support.hpp` with support machinery for the ranges algorithm tests. It notably defines:
* `is_permissive` for determining whether we are compiling in MSVC's permissive mode (lines 18-37)
* A class template `borrowed<bool>` whose specializations always model `range` and model `borrowed_range` iff the template parameter is `true` (lines 39-46)
* Function objects `get_first` and `get_second` which project the pertinent member from `pair` arguments (lines 48-54)
* A class template `move_only_range<T>` which adapts a `contiguous_range` of `T` into a move-only `view` with move-only `input_iterator`s (lines 56-150)
* A "phony" iterator class template `test_iterator` with tunable category, value type, and difference capability for instantiation tests (lines 152-363)
* A similar "phony" class template `test_range` with tunable category, size, and commonality (i.e., is the sentinel type the same as the iterator type) (lines 365-423)
* "phony" predicate and projection types for instantiation tests (lines 425-442)
* combinatoric instantiation machinery for instantiation tests that instantiate with all interesting kinds of output iterators or input ranges (lines 444-529)

A new compile-only test `tests/std/tests/P0896R4_ranges_algorithm_machinery` which covers:
* `indirectly_unary_invocable`/`indirectly_regular_unary_invocable`
* `indirect_unary_predicate`/`indirect_binary_predicate`/`indirect_result_t`
* `projected`
* `indirectly_copyable`/`indirectly_swappable`/`indirectly_comparable`
* `dangling`/`borrowed_iterator_t`
* the result types `in_found_result`/`in_fun_result`/`in_in_result`/`in_out_result`/`in_in_out_result`/`in_out_out_result`/`min_max_result`

Very simple smoke and instantiation tests for the 15 new algorithms in:
* `tests/std/tests/P0896R4_ranges_alg_all_of`
* `tests/std/tests/P0896R4_ranges_alg_any_of`
* `tests/std/tests/P0896R4_ranges_alg_copy`
* `tests/std/tests/P0896R4_ranges_alg_copy_if`
* `tests/std/tests/P0896R4_ranges_alg_copy_n`
* `tests/std/tests/P0896R4_ranges_alg_count`
* `tests/std/tests/P0896R4_ranges_alg_count_if`
* `tests/std/tests/P0896R4_ranges_alg_equal`
* `tests/std/tests/P0896R4_ranges_alg_find`
* `tests/std/tests/P0896R4_ranges_alg_find_if`
* `tests/std/tests/P0896R4_ranges_alg_find_if_not`
* `tests/std/tests/P0896R4_ranges_alg_for_each`
* `tests/std/tests/P0896R4_ranges_alg_for_each_n`
* `tests/std/tests/P0896R4_ranges_alg_mismatch`
* `tests/std/tests/P0896R4_ranges_alg_none_of`

Resolves:
* #537 `<concepts>`: LWG-3175 has been accepted, so we should remove commented-out code
* #540 LWG-3194 `ConvertibleTo` prose does not match code
* #546 LWG-3379 `safe` in several library names is misleading
* #559 P1964R2 "Replacing `boolean` with _`boolean-testable`_"
* #561 P2102R0 "Making 'Implicit Expression Variations' More Explicit"
* #563 P2091R0 "Fixing Issues With Range Access CPOs"
2020-03-04 22:19:53 -08:00
Casey Carter 369008308c
Implement range_size_t (#514)
per the resolution of LWG-3335.
2020-03-04 22:18:55 -08:00
Stephan T. Lavavej fee81ee626
Replace `_STATIC_UNLESS_PURE` with `static`. (#584)
This was a workaround for a compiler bug (in constexpr initialization)
that has been fixed.
2020-03-03 16:24:56 -08:00
Michael Schellenberger Costa 1cd4e071ff
LWG-3330 Include `<compare>` from most library headers (#513)
Fixes #545.
2020-03-03 13:54:46 -08:00
Michael Scott Mueller 922eec2a12
<filesystem>::space fails with no read access to root (#552)
* <filesystem>::space fails with no read access to root

Avoid the unnecessary call to GetVolumePathNameW because read access for this call is required on the root of the mounted volume. This call used to be required for GetDiskFreeSpace, but should not be used for GetDiskFreeSpaceExW, where the full path should be used. The appropriate read permissions on the given path will be taken into consideration.

Co-authored-by: Billy O'Neal <billy.oneal@gmail.com>
2020-03-03 09:37:04 -08:00
Billy O'Neal eb31b9245a
Add Azure provisioning scripts we use for our builders. (#553) 2020-03-02 20:14:28 -08:00
Jean Philippe e967cdc800
<filesystem>: Fix directory_iterator returning "dot" and "dotdot" entries (#562) 2020-03-02 17:27:47 -08:00
Billy O'Neal cdb8e814a8
Cache the "installed" vcpkg directory only. (#576) 2020-03-02 17:18:35 -08:00
Jean Philippe dd8152c8b4
Update byte detection by using __cpp_lib_byte (#577)
Fixes #564.
2020-03-02 15:47:26 -08:00
Xiang Fan b85797476f
Apply a new attribute '[[msvc::known_semantics]]' (#580)
Apply a new attribute '[[msvc::known_semantics]]' to communicate to the compiler that certain type trait specializations have the standard-mandated semantics
2020-03-02 15:30:16 -08:00
mocabe 0e46d7ab99
Fix missing SFINAE in operator/ and operator% for std::chrono::duration (#573) 2020-03-02 12:23:47 -08:00
Svido 1358f83b85
Detect Perl code as Perl instead of Raku (#569)
Fixes #523.
2020-02-29 14:41:37 -08:00
Svido bb373d11a2
<xutility>: remove LWG issue comment (#568)
Fixes #531.
2020-02-29 14:39:54 -08:00
Svido 51b212a884
LWG-3390 `make_move_iterator()` cannot be used to construct a `move_iterator` for a move-only iterator (#567)
Fixes #547.
2020-02-29 14:37:24 -08:00
Daniel Marshall 627eced6ec
P1115R3 erase()/erase_if() Return size_type (#566)
Fixes #555.
2020-02-29 14:35:24 -08:00
Jean Philippe 5249900144
Avoid declaring multiple variables on a single line (#550)
Fixes #522.
2020-02-29 14:30:33 -08:00
Michael Schellenberger Costa 3e5230dab5
LWG-3320 removes span::const_iterator (#548)
Fixes #542.
2020-02-29 14:27:21 -08:00
Michael Schellenberger Costa 9057993c82
LWG-3329 `totally_ordered_with` both directly and indirectly requires `common_reference_with` (#512)
Fixes #544.
2020-02-29 14:24:36 -08:00
Jean Philippe 577827a79a
Consistently use empty braces to construct tags (#497)
Fixes #468.
2020-02-29 14:21:41 -08:00
Adam Bucior a092e67713
<memory> construct_at() (#501) 2020-02-28 19:19:37 -08:00