<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<title>Evolution status after Cologne 2019</title>

	<style>
	p {text-align:justify}
	li {text-align:justify}
	blockquote.note
	{
		background-color:#E0E0E0;
		padding-left: 15px;
		padding-right: 15px;
		padding-top: 1px;
		padding-bottom: 1px;
	}
	ins {color:#00A000}
	del {color:#A00000}
	</style>
</head>
<body>

<address align=right>
Document number: P1018r4
<br/>
Audience: WG21
<br/>
<br/>
<a href="mailto:ville.voutilainen@gmail.com">Ville Voutilainen</a><br/>
2019-08-04<br/>
</address>
<hr/>
<h1 align=center>Evolution status after Cologne 2019</h1>

<h2>Abstract</h2>

<p>
  This paper is a collection of items Evolution has worked
  on up to and in the Cologne meeting, their status,
  and plans for the future.
</p>

<h2>Contracts</h2>

<p>
  Evolution discussed multiple different approaches for Contracts
  for C++20; after initially choosing to pursue P1607R0 Minimizing Contracts,
  decided to go with D1823R0 Remove Contracts from C++20. Expecting
  Contracts to make a comeback for C++23.
</p>

<h2>Coroutines</h2>

<p>
  Evolution discussed P1745R0 Coroutine changes for C++20 and beyond,
  and P1485R1 Better keywords for the Coroutines; there was no consensus
  to adopt either of these.
</p>

<h2>Modules</h2>

<p>
  Evolution approved what can be considered as bugfixes and a minimal
  amount of library support for Modules; these are
  <ul>
  <li>D1811R0 Relaxing redefinition restrictions for re-exportation robustness,</li>
  <li>P1502R0 Standard library header units for C++20,</li>
  <li>P1703R0 Recognizing Header Unit Imports Requires Full Preprocessing,</li>
  <li>and P1766R0 Mitigating minor modules maladies.</li>
  </ul>
</p>


<h2>All Your Spaceships Are Belong to Us</h2>

<p>
  Evolution approved P1630R0 Spaceship needs a tune-up: Addressing some discovered issues with P0515 and P1185. This makes the reversed operator
  candidates be required to return bool, and deletes defaulted
  operators for types with reference members or variant members.
</p>

<h2>Concepts</h2>

<p>
  Evolution approved P1452R1 On the non-uniform semantics of return-type-requirements; this removes an expression constraint -> Type, and C++ now necessitates
  the use of -> std::same<T> or -> std::convertible_to<T>. Evolution also approved
  P1616R0 Using unconstrained template template parameters with constrained templates.
</p>

<h2>A couple of small fixes</h2>

<p>
  Evolution approved
  <ul>
    <li>P1668R0 Enabling constexpr Intrinsics By Permitting Unevaluated inline-assembly in constexpr Functions,</li>
  <li>P1675R0 rethrow_exception must be allowed to copy,</li>
    <li>and P1771R0 nodiscard for constructors.</li>
  </ul>
</p>

<h2>Floating-point types as non-type template parameters</h2>

<p>
  Evolution approved P1714R0 NTTP are incomplete without float, double, and long double!. This allows floating point types as NTTPs, by making their
  comparison be done in terms of bit representation. While this is
  somewhat novel and late, it's allegedly possible to write a work-around
  in C++20 with a fairly small amount of code, and Evolution elected to support
  floating-point types directly.
</p>

<h2>Near-future EWG plans</h2>

<p>
  The high-order bit of our next steps is ballot resolution
  in Belfast.
  Once that is done, Evolution will switch into full C++23 mode.
</p>
</html>
