<html><head><title>Constexpr Library Additions: chrono</title><style type="text/css">ol{margin:0;padding:0}p{margin:0}.c9{color:#000099;font-size:11pt;text-decoration:underline;font-family:Arial}.c8{color:#000000;font-size:24pt;font-family:Arial;font-weight:bold}.c0{color:#000000;font-size:11pt;font-family:Arial;font-weight:bold}.c2{color:#000000;font-size:14pt;font-family:Arial;font-weight:bold}.c4{color:#000000;font-size:18pt;font-family:Arial;font-weight:bold}.c3{line-height:1.15;text-indent:0pt;direction:ltr}.c1{color:#000000;font-size:11pt;font-family:Arial}.c11{padding-top:14.0pt;padding-bottom:4.0pt}.c7{background-color:#ea9999;text-decoration:line-through}.c6{background-color:#e06666;text-decoration:line-through}.c5{background-color:#b6d7a8}.c10{font-style:italic}.c12{background-color:#ffffff}</style></head><body class="c12"><p class="c3"><span class="c4">Constexpr Library Additions: chrono</span></p><p class="c3"><span class="c8">&nbsp;</span></p><p class="c3"><span class="c1">ISO/IEC JTC1 SC22 WG21 N3229 = 10-0219 - 2010-11-24</span></p><p class="c3"><span class="c1">Benjamin Kosnik, </span><span class="c9"><a href="mailto:bkoz@redhat.com">bkoz@redhat.com</a></span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c0">Addresses</span><span class="c2">: </span><span class="c1">LWG 2013, LWG 20xx &ldquo;time_point constexpr member functions need constexpr conversion constructor&rdquo;</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c2">Introduction</span></p><p class="c3"><span class="c4">&nbsp;</span></p><p class="c3"><span class="c1">This paper details use of the ISO C++0x constexpr feature, as initially introduced in &ldquo;Generalized Constant Expressions &mdash; Revision 5&rdquo; (N2235) and incorporating all other subsequent changes as per ISO C++ draft N3126. Several CWG issues also influence the language with respect to constexpr: see issues 1099, 1125, 1194, 1195, 1197, 1198, 1199 and c++-std-core postings number 17890 and 17912. Additional implementation experience has motivated the following changes and additions to the library specification. </span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3 c11"><span class="c2">Proposed Changes</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">A list of additional places in 20.11 Time Utilities aka std::chrono that can exploit the constexpr language feature is below. For the changes listed, the new text is put in place</span><span class="c0 c10"> </span><span class="c0 c5">in bold and green</span><span class="c1"> with the older text it is replacing </span><span class="c1 c7">struckthrough in red</span><span class="c1">.</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">Remove the following:</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Remove explicitly defaulted duration default constructor, and add default </span></p><p class="c3"><span class="c1"> &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; constructor that can initialize possible (rep) member data with an initialization </span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;list. (As constexpr defaulted constructors are only well formed for classes </span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;where all member data have constexpr default constructors. Scalars, for &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;instance, do not.)</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">Add the following:</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Mark duration copy constructor constexpr.</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Mark comparison operator templates ==, !=, &lt;, &lt;=, &gt;, &gt;= for duration </span></p><p class="c3"><span class="c1"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;constexpr</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Mark all constructors in time_point constexpr</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Mark member function time_point::time_since_epoc constexpr</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Mark function templates duration_cast and timepoint_cast constexpr</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Mark comparison operator templates ==, !=, &lt;, &lt;=, &gt;, &gt;= for time_point &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p><p class="c3"><span class="c1"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;constexpr</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Mark system_clock::is_monotonic, monotonic_clock::is_monotonic, and &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;high_resolution_clock::is_monotonic constexpr.</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c2">Proposed wording</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c0">a) Modify 20.11 as follows:</span></p><p class="c3"><span class="c0">&nbsp;</span></p><p class="c3"><span class="c1">// duration comparisons</span></p><p class="c3"><span class="c1">template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;</span></p><p class="c3"><span class="c1"> &nbsp; </span><span class="c0 c5">constexpr</span><span class="c1"> bool operator==(const duration&lt;Rep1, Period1&gt;&amp; lhs, </span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;const duration&lt;Rep2, Period2&gt;&amp; rhs);</span></p><p class="c3"><span class="c1">template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;</span></p><p class="c3"><span class="c1"> &nbsp; </span><span class="c0 c5">constexpr</span><span class="c1"> bool operator!=(const duration&lt;Rep1, Period1&gt;&amp; lhs, </span></p><p class="c3"><span class="c1"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;const duration&lt;Rep2, Period2&gt;&amp; rhs);</span></p><p class="c3"><span class="c1">template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;</span></p><p class="c3"><span class="c1"> &nbsp; </span><span class="c0 c5">constexpr</span><span class="c1"> bool operator&lt; (const duration&lt;Rep1, Period1&gt;&amp; lhs, </span></p><p class="c3"><span class="c1"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;const duration&lt;Rep2, Period2&gt;&amp; rhs);</span></p><p class="c3"><span class="c1">template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;</span></p><p class="c3"><span class="c1"> &nbsp; </span><span class="c0 c5">constexpr</span><span class="c1"> bool operator&lt;=(const duration&lt;Rep1, Period1&gt;&amp; lhs, </span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; const duration&lt;Rep2, Period2&gt;&amp; rhs);</span></p><p class="c3"><span class="c1">template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;</span></p><p class="c3"><span class="c1"> &nbsp; </span><span class="c0 c5">constexpr</span><span class="c1"> bool operator&gt; (const duration&lt;Rep1, Period1&gt;&amp; lhs, </span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; const duration&lt;Rep2, Period2&gt;&amp; rhs);</span></p><p class="c3"><span class="c1">template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;</span></p><p class="c3"><span class="c1"> &nbsp; </span><span class="c0 c5">constexpr</span><span class="c1"> bool operator&gt;=(const duration&lt;Rep1, Period1&gt;&amp; lhs, </span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; const duration&lt;Rep2, Period2&gt;&amp; rhs);</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">// duration_cast</span></p><p class="c3"><span class="c1">template &lt;class ToDuration, class Rep, class Period&gt;</span></p><p class="c3"><span class="c1"> &nbsp;</span><span class="c0 c5">constexpr</span><span class="c0"> </span><span class="c1">ToDuration duration_cast(const duration&lt;Rep, Period&gt;&amp; d);</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">// time_point comparisons</span></p><p class="c3"><span class="c1">template &lt;class Clock, class Duration1, class Duration2&gt;</span></p><p class="c3"><span class="c1"> &nbsp; </span><span class="c0 c5">constexpr</span><span class="c0"> </span><span class="c1">bool operator==(const time_point&lt;Clock, Duration1&gt;&amp; lhs, </span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;const time_point&lt;Clock, Duration2&gt;&amp; rhs);</span></p><p class="c3"><span class="c1">template &lt;class Clock, class Duration1, class Duration2&gt;</span></p><p class="c3"><span class="c1"> &nbsp; </span><span class="c0 c5">constexpr</span><span class="c0"> </span><span class="c1">bool operator!=(const time_point&lt;Clock, Duration1&gt;&amp; lhs, </span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; const time_point&lt;Clock, Duration2&gt;&amp; rhs);</span></p><p class="c3"><span class="c1">template &lt;class Clock, class Duration1, class Duration2&gt;</span></p><p class="c3"><span class="c1"> &nbsp; </span><span class="c0 c5">constexpr</span><span class="c0"> </span><span class="c1">bool operator&lt; (const time_point&lt;Clock, Duration1&gt;&amp; lhs, </span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; const time_point&lt;Clock, Duration2&gt;&amp; rhs);</span></p><p class="c3"><span class="c1">template &lt;class Clock, class Duration1, class Duration2&gt;</span></p><p class="c3"><span class="c1"> &nbsp; </span><span class="c0 c5">constexpr</span><span class="c0"> </span><span class="c1">bool operator&lt;=(const time_point&lt;Clock, Duration1&gt;&amp; lhs, </span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; const time_point&lt;Clock, Duration2&gt;&amp; rhs);</span></p><p class="c3"><span class="c1">template &lt;class Clock, class Duration1, class Duration2&gt;</span></p><p class="c3"><span class="c1"> &nbsp; </span><span class="c0 c5">constexpr</span><span class="c0"> </span><span class="c1">bool operator&gt; (const time_point&lt;Clock, Duration1&gt;&amp; lhs, </span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const time_point&lt;Clock, Duration2&gt;&amp; rhs);</span></p><p class="c3"><span class="c1">template &lt;class Clock, class Duration1, class Duration2&gt;</span></p><p class="c3"><span class="c1"> &nbsp; </span><span class="c0 c5">constexpr</span><span class="c0"> </span><span class="c1">bool operator&gt;=(const time_point&lt;Clock, Duration1&gt;&amp; lhs, </span></p><p class="c3"><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;const time_point&lt;Clock, Duration2&gt;&amp; rhs);</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">// time_point_cast</span></p><p class="c3"><span class="c1">template &lt;class ToDuration, class Clock, class Duration&gt;</span></p><p class="c3"><span class="c1"> &nbsp;</span><span class="c0 c5">constexpr</span><span class="c1"> time_point&lt;Clock, ToDuration&gt; </span></p><p class="c3"><span class="c1"> &nbsp;time_point_cast(const time_point&lt;Clock, Duration&gt;&amp; t);</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c0">b) Modify 20.11.3 as follows:</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">constexpr duration() </span><span class="c1 c7">= default</span><span class="c1">;</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c0 c5">constexpr</span><span class="c0"> </span><span class="c1">duration(const duration&amp;) = default;</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c0">c) Add to 20.11.3.1 as follows:</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">constexpr duration();</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">Effects: Constructs an object of type duration, default initializing rep_.</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c0">d) Modify 20.11.4.1 as follows:</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c0 c5">constexpr</span><span class="c0"> </span><span class="c1">time_point();</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c0 c5">constexpr</span><span class="c0"> </span><span class="c1">time_point(const duration&amp; d);</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">template &lt;class Duration2&gt;</span></p><p class="c3"><span class="c1"> &nbsp;</span><span class="c0 c5">constexpr</span><span class="c0"> </span><span class="c1">time_point(const time_point&lt;clock, Duration2&gt;&amp; t);</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c0">e) Modify 20.11.4.2 as follows:</span></p><p class="c3"><span class="c0">&nbsp;</span></p><p class="c3"><span class="c0 c5">constexpr</span><span class="c0"> </span><span class="c1">duration time_since_epoch() const;</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c0">f) Modify 20.11.5.1 as follows:</span></p><p class="c3"><span class="c0">&nbsp;</span></p><p class="c3"><span class="c1">static </span><span class="c1 c6">const</span><span class="c1"> </span><span class="c0 c5">constexpr </span><span class="c1">bool is_monotonic = unspecified;</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c0">g) Modify 20.11.5.2 as follows:</span></p><p class="c3"><span class="c0">&nbsp;</span></p><p class="c3"><span class="c1">static </span><span class="c1 c6">const</span><span class="c1"> </span><span class="c0 c5">constexpr</span><span class="c1"> bool is_monotonic = unspecified;</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c0">h) Modify 20.11.5.3 as follows:</span></p><p class="c3"><span class="c0">&nbsp;</span></p><p class="c3"><span class="c1">static </span><span class="c1 c6">const</span><span class="c1"> </span><span class="c0 c5">constexpr</span><span class="c1"> bool is_monotonic = unspecified;</span></p><p class="c3"><span class="c1"> </span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c2">Acknowledgments</span></p><p class="c3"><span class="c1">&nbsp;</span></p><p class="c3"><span class="c1">Many thanks to Jason Merrill, Paolo Carlini, and Jonathan Wakely for reviewing this document and providing assistance.</span></p></body></html>