diff options
3 files changed, 54 insertions, 12 deletions
diff --git a/libcxx/include/chrono b/libcxx/include/chrono index f0bd6aff2b7..b9709b37365 100644 --- a/libcxx/include/chrono +++ b/libcxx/include/chrono @@ -77,16 +77,18 @@ public: constexpr common_type<duration>::type operator+() const; constexpr common_type<duration>::type operator-() const; - constexpr duration& operator++(); - constexpr duration operator++(int); - constexpr duration& operator--(); - constexpr duration operator--(int); + constexpr duration& operator++(); // constexpr in C++17 + constexpr duration operator++(int); // constexpr in C++17 + constexpr duration& operator--(); // constexpr in C++17 + constexpr duration operator--(int); // constexpr in C++17 - constexpr duration& operator+=(const duration& d); - constexpr duration& operator-=(const duration& d); + constexpr duration& operator+=(const duration& d); // constexpr in C++17 + constexpr duration& operator-=(const duration& d); // constexpr in C++17 - duration& operator*=(const rep& rhs); - duration& operator/=(const rep& rhs); + duration& operator*=(const rep& rhs); // constexpr in C++17 + duration& operator/=(const rep& rhs); // constexpr in C++17 + duration& operator%=(const rep& rhs); // constexpr in C++17 + duration& operator%=(const duration& rhs); // constexpr in C++17 // special values @@ -127,8 +129,8 @@ public: // arithmetic - time_point& operator+=(const duration& d); - time_point& operator-=(const duration& d); + time_point& operator+=(const duration& d); // constexpr in C++17 + time_point& operator-=(const duration& d); // constexpr in C++17 // special values @@ -1355,8 +1357,8 @@ public: // arithmetic - _LIBCPP_INLINE_VISIBILITY time_point& operator+=(const duration& __d) {__d_ += __d; return *this;} - _LIBCPP_INLINE_VISIBILITY time_point& operator-=(const duration& __d) {__d_ -= __d; return *this;} + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 time_point& operator+=(const duration& __d) {__d_ += __d; return *this;} + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 time_point& operator-=(const duration& __d) {__d_ -= __d; return *this;} // special values diff --git a/libcxx/test/std/utilities/time/time.point/time.point.arithmetic/op_+=.pass.cpp b/libcxx/test/std/utilities/time/time.point/time.point.arithmetic/op_+=.pass.cpp index ffe855ce903..5d616418ca5 100644 --- a/libcxx/test/std/utilities/time/time.point/time.point.arithmetic/op_+=.pass.cpp +++ b/libcxx/test/std/utilities/time/time.point/time.point.arithmetic/op_+=.pass.cpp @@ -12,15 +12,35 @@ // time_point // time_point& operator+=(const duration& d); +// constexpr in c++17 #include <chrono> #include <cassert> +#include "test_macros.h" + +#if TEST_STD_VER > 14 +constexpr bool constexpr_test() +{ + typedef std::chrono::system_clock Clock; + typedef std::chrono::milliseconds Duration; + std::chrono::time_point<Clock, Duration> t(Duration(5)); + t += Duration(4); + return t.time_since_epoch() == Duration(9); +} +#endif + int main() { + { typedef std::chrono::system_clock Clock; typedef std::chrono::milliseconds Duration; std::chrono::time_point<Clock, Duration> t(Duration(3)); t += Duration(2); assert(t.time_since_epoch() == Duration(5)); + } + +#if TEST_STD_VER > 14 + static_assert(constexpr_test(), ""); +#endif } diff --git a/libcxx/test/std/utilities/time/time.point/time.point.arithmetic/op_-=.pass.cpp b/libcxx/test/std/utilities/time/time.point/time.point.arithmetic/op_-=.pass.cpp index acad1cfecb4..44d5d41106f 100644 --- a/libcxx/test/std/utilities/time/time.point/time.point.arithmetic/op_-=.pass.cpp +++ b/libcxx/test/std/utilities/time/time.point/time.point.arithmetic/op_-=.pass.cpp @@ -12,15 +12,35 @@ // time_point // time_point& operator-=(const duration& d); +// constexpr in c++17 #include <chrono> #include <cassert> +#include "test_macros.h" + +#if TEST_STD_VER > 14 +constexpr bool constexpr_test() +{ + typedef std::chrono::system_clock Clock; + typedef std::chrono::milliseconds Duration; + std::chrono::time_point<Clock, Duration> t(Duration(5)); + t -= Duration(4); + return t.time_since_epoch() == Duration(1); +} +#endif + int main() { + { typedef std::chrono::system_clock Clock; typedef std::chrono::milliseconds Duration; std::chrono::time_point<Clock, Duration> t(Duration(3)); t -= Duration(2); assert(t.time_since_epoch() == Duration(1)); + } + +#if TEST_STD_VER > 14 + static_assert(constexpr_test(), ""); +#endif } |