This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of Resolved status.
time_point constructors need to be constexprSection: 30.6 [time.point] Status: Resolved Submitter: Anthony Williams Opened: 2011-05-13 Last modified: 2016-01-28
Priority: Not Prioritized
View all issues with Resolved status.
Discussion:
In 30.6 [time.point], time_point::min() and time_point::max()
are listed as constexpr. However, time_point has no constexpr constructors,
so is not a literal type, and so these functions cannot be constexpr without adding a
constexpr constructor for implementation purposes.
constexpr to the constructors of time_point. The effects of
the constructor template basically imply that the member function time_since_epoch() is
intended to be constexpr as well.
[2012, Portland]
Resolved by adopting paper n3469.
Proposed resolution:
This wording is relative to the FDIS.
Alter the class template definition in 30.6 [time.point] as follows:
template <class Clock, class Duration = typename Clock::duration>
class time_point {
[…]
public:
// 20.11.6.1, construct:
constexpr time_point(); // has value epoch
constexpr explicit time_point(const duration& d); // same as time_point() + d
template <class Duration2>
constexpr time_point(const time_point<clock, Duration2>& t);
// 20.11.6.2, observer:
constexpr duration time_since_epoch() const;
[…]
};
Alter the declarations in 30.6.2 [time.point.cons]:
constexpr time_point();-1- Effects: Constructs an object of type
time_point, initializingd_withduration::zero(). Such atime_pointobject represents the epoch.
constexpr explicit time_point(const duration& d);-2- Effects: Constructs an object of type
time_point, initializingd_withd. Such atime_pointobject represents the epoch+ d.
template <class Duration2> constexpr time_point(const time_point<clock, Duration2>& t);-3- Remarks: This constructor shall not participate in overload resolution unless
-4- Effects: Constructs an object of typeDuration2is implicitly convertible toduration.time_point, initializingd_witht.time_since_epoch().
Alter the declaration in 30.6.3 [time.point.observer]:
constexpr duration time_since_epoch() const;-1- Returns: d_.