[time.point.nonmember]

# 30 Time library [[time]](./#time)

## 30.6 Class template time_point [[time.point]](time.point#nonmember)

### 30.6.6 Non-member arithmetic [time.point.nonmember]

[ð](#lib:operator+,time_point)

`template<class Clock, class Duration1, class Rep2, class Period2>
  constexpr time_point<Clock, common_type_t<Duration1, duration<Rep2, Period2>>>
    operator+(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs);
`

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2431)

*Returns*: CT(lhs.time_since_epoch() + rhs), where CT is the type of the return value[.](#1.sentence-1)

[ð](#lib:operator+,time_point_)

`template<class Rep1, class Period1, class Clock, class Duration2>
  constexpr time_point<Clock, common_type_t<duration<Rep1, Period1>, Duration2>>
    operator+(const duration<Rep1, Period1>& lhs, const time_point<Clock, Duration2>& rhs);
`

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2445)

*Returns*: rhs + lhs[.](#2.sentence-1)

[ð](#lib:operator-,time_point)

`template<class Clock, class Duration1, class Rep2, class Period2>
  constexpr time_point<Clock, common_type_t<Duration1, duration<Rep2, Period2>>>
    operator-(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs);
`

[3](#3)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2459)

*Returns*: CT(lhs.time_since_epoch() - rhs),
where CT is the type of the return value[.](#3.sentence-1)

[ð](#lib:operator-,time_point_)

`template<class Clock, class Duration1, class Duration2>
  constexpr common_type_t<Duration1, Duration2>
    operator-(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);
`

[4](#4)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L2473)

*Returns*: lhs.time_since_epoch() - rhs.time_since_epoch()[.](#4.sentence-1)
