From Jason Turner

[diff.cpp17.depr]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp5cq5mug3/{from.md → to.md} +61 -0
tmp/tmp5cq5mug3/{from.md → to.md} RENAMED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ### [[depr]]: compatibility features <a id="diff.cpp17.depr">[[diff.cpp17.depr]]</a>
2
+
3
+ **Change:** Remove `uncaught_exception`. **Rationale:** The function did
4
+ not have a clear specification when multiple exceptions were active, and
5
+ has been superseded by `uncaught_exceptions`. **Effect on original
6
+ feature:** A valid C++17 program that calls `std::uncaught_exception`
7
+ may fail to compile. It might be revised to use
8
+ `std::uncaught_exceptions` instead, for clear and portable semantics.
9
+
10
+ **Change:** Remove support for adaptable function API. **Rationale:**
11
+ The deprecated support relied on a limited convention that could not be
12
+ extended to support the general case or new language features. It has
13
+ been superseded by direct language support with `decltype`, and by the
14
+ `std::bind` and `std::not_fn` function templates. **Effect on original
15
+ feature:** A valid C++17 program that relies on the presence of
16
+ `result_type`, `argument_type`, `first_argument_type`, or
17
+ `second_argument_type` in a standard library class may fail to compile.
18
+ A valid C++17 program that calls `not1` or `not2`, or uses the class
19
+ templates `unary_negate` or `binary_negate`, may fail to compile.
20
+
21
+ **Change:** Remove redundant members from `std::allocator`.
22
+ **Rationale:** `std::allocator` was overspecified, encouraging direct
23
+ usage in user containers rather than relying on `std::allocator_traits`,
24
+ leading to poor containers. **Effect on original feature:** A valid
25
+ C++17 program that directly makes use of the `pointer`, `const_pointer`,
26
+ `reference`, `const_reference`, `rebind`, `address`, `construct`,
27
+ `destroy`, or `max_size` members of `std::allocator`, or that directly
28
+ calls `allocate` with an additional hint argument, may fail to compile.
29
+
30
+ **Change:** Remove `raw_storage_iterator`. **Rationale:** The iterator
31
+ encouraged use of algorithms that might throw exceptions, but did not
32
+ return the number of elements successfully constructed that might need
33
+ to be destroyed in order to avoid leaks. **Effect on original feature:**
34
+ A valid C++17 program that uses this iterator class may fail to compile.
35
+
36
+ **Change:** Remove temporary buffers API. **Rationale:** The temporary
37
+ buffer facility was intended to provide an efficient optimization for
38
+ small memory requests, but there is little evidence this was achieved in
39
+ practice, while requiring the user to provide their own exception-safe
40
+ wrappers to guard use of the facility in many cases. **Effect on
41
+ original feature:** A valid C++17 program that calls
42
+ `get_temporary_buffer` or `return_temporary_buffer` may fail to compile.
43
+
44
+ **Change:** Remove `shared_ptr::unique`. **Rationale:** The result of a
45
+ call to this member function is not reliable in the presence of multiple
46
+ threads and weak pointers. The member function `use_count` is similarly
47
+ unreliable, but has a clearer contract in such cases, and remains
48
+ available for well defined use in single-threaded cases. **Effect on
49
+ original feature:** A valid C++17 program that calls `unique` on a
50
+ `shared_ptr` object may fail to compile.
51
+
52
+ **Change:** Remove deprecated type traits. **Rationale:** The traits had
53
+ unreliable or awkward interfaces. The `is_literal_type` trait provided
54
+ no way to detect which subset of constructors and member functions of a
55
+ type were declared `constexpr`. The `result_of` trait had a surprising
56
+ syntax that could not report the result of a regular function type. It
57
+ has been superseded by the `invoke_result` trait. **Effect on original
58
+ feature:** A valid C++17 program that relies on the `is_literal_type` or
59
+ `result_of` type traits, on the `is_literal_type_v` variable template,
60
+ or on the `result_of_t` alias template may fail to compile.
61
+