111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===// 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// The LLVM Compiler Infrastructure 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Source Licenses. See LICENSE.TXT for details. 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===// 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// <chrono> 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// time_point 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// template <class Clock, class Duration1, class Rep2, class Period2> 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// time_point<Clock, typename common_type<Duration1, duration<Rep2, Period2>>::type> 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// operator-(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs); 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <chrono> 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cassert> 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint main() 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef std::chrono::system_clock Clock; 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef std::chrono::milliseconds Duration1; 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef std::chrono::microseconds Duration2; 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::chrono::time_point<Clock, Duration1> t1(Duration1(3)); 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::chrono::time_point<Clock, Duration2> t2 = t1 - Duration2(5); 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(t2.time_since_epoch() == Duration2(2995)); 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if _LIBCPP_STD_VER > 11 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert constexpr std::chrono::time_point<Clock, Duration1> t1(Duration1(3)); 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert constexpr std::chrono::time_point<Clock, Duration2> t2 = t1 - Duration2(5); 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static_assert(t2.time_since_epoch() == Duration2(2995), ""); 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 39