<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<title>Wording for GB 50</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}
	code {white-space:pre;}
	</style>
</head>
<body>

<address align=right>
Document number: P0505R0<br>
<br/>
<br/>
<a href="mailto:howard.hinnant@gmail.com">Howard E. Hinnant</a><br/>
2016-11-09<br/>
</address>
<hr/>
<h1 align=center>Wording for GB 50</h1>

<a name="Wording"></a><h2>Proposed Wording</h2>

<ol>
<li>
<p>
Modify the synopsis of 20.17.5 [time.duration]:
</p>

<blockquote><pre>
template &lt;class Rep, class Period = ratio&lt;1&gt;&gt;
class duration {
public:
    using rep    = Rep;
    using period = Period;
private:
    rep rep_; // exposition only public:
public:
    // 20.17.5.1, construct/copy/destroy:
    constexpr duration() = default;
    template &lt;class Rep2&gt;
        constexpr explicit duration(const Rep2&amp; r);
    template &lt;class Rep2, class Period2&gt;
        constexpr duration(const duration&lt;Rep2, Period2&gt;&amp; d);
    ~duration() = default;
    duration(const duration&amp;) = default;
    duration&amp; operator=(const duration&amp;) = default;

    // 20.17.5.2, observer:
    constexpr rep count() const;

    // 20.17.5.3, arithmetic:
    constexpr duration operator+() const;
    constexpr duration operator-() const;
    <ins>constexpr</ins> duration&amp; operator++();
    <ins>constexpr</ins> duration operator++(int);
    <ins>constexpr</ins> duration&amp; operator--();
    <ins>constexpr</ins> duration operator--(int);

    <ins>constexpr</ins> duration&amp; operator+=(const duration&amp; d);
    <ins>constexpr</ins> duration&amp; operator-=(const duration&amp; d);

    <ins>constexpr</ins> duration&amp; operator*=(const rep&amp; rhs);
    <ins>constexpr</ins> duration&amp; operator/=(const rep&amp; rhs);
    <ins>constexpr</ins> duration&amp; operator%=(const rep&amp; rhs);
    <ins>constexpr</ins> duration&amp; operator%=(const duration&amp; rhs);

    // 20.17.5.4, special values:
    static constexpr duration zero();
    static constexpr duration min();
    static constexpr duration max();
};
</pre></blockquote>
</li>

<li>
<p>
Modify 20.17.5.3 [time.duration.arithmetic]:
</p>
<blockquote><pre>
...
<ins>constexpr</ins> duration&amp; operator++();
...
<ins>constexpr</ins> duration operator++(int);
...
<ins>constexpr</ins> duration&amp; operator--();
...
<ins>constexpr</ins> duration operator--(int);
...
<ins>constexpr</ins> duration&amp; operator+=(const duration&amp; d);
...
<ins>constexpr</ins> duration&amp; operator-=(const duration&amp; d);
...
<ins>constexpr</ins> duration&amp; operator*=(const rep&amp; rhs);
...
<ins>constexpr</ins> duration&amp; operator/=(const rep&amp; rhs);
...
<ins>constexpr</ins> duration&amp; operator%=(const rep&amp; rhs);
...
<ins>constexpr</ins> duration&amp; operator%=(const duration&amp; rhs);
...
</pre></blockquote>
</li>

<li>
<p>
Modify the synopsis of 20.17.6 [time.point]:
</p>

<blockquote><pre>
template &lt;class Clock, class Duration = typename Clock::duration&gt;
class time_point {
public:
    using clock    = Clock;
    using duration = Duration;
    using rep      = typename duration::rep;
    using period   = typename duration::period;
private:
    duration d_;  // exposition only
public:
    // 20.17.6.1, construct:
    constexpr time_point(); // has value epoch
    constexpr explicit time_point(const duration&amp; d);  // same as time_point() + d
    template &lt;class Duration2&gt;
        constexpr time_point(const time_point&lt;clock, Duration2&gt;&amp; t);

    // 20.17.6.2, observer:
    constexpr duration time_since_epoch() const;

    // 20.17.6.3, arithmetic:
    <ins>constexpr</ins> time_point&amp; operator+=(const duration&amp; d);
    <ins>constexpr</ins> time_point&amp; operator-=(const duration&amp; d);

    // 20.17.6.4, special values:
    static constexpr time_point min();
    static constexpr time_point max();
};
</pre></blockquote>
</li>

<li>
<p>
Modify 20.17.6.3 [time.point.arithmetic]:
</p>
<blockquote><pre>
...
<ins>constexpr</ins> time_point&amp; operator+=(const duration&amp; d);
...
<ins>constexpr</ins> time_point&amp; operator-=(const duration&amp; d);
...
</pre></blockquote>
</li>

</ol>

</body>
</html>
