Scroll to navigation

std::chrono::operator+,std::chrono::operator-(std::chrono::weekday)(3) C++ Standard Libary std::chrono::operator+,std::chrono::operator-(std::chrono::weekday)(3)

NAME

std::chrono::operator+,std::chrono::operator-(std::chrono::weekday) - std::chrono::operator+,std::chrono::operator-(std::chrono::weekday)

Synopsis


Defined in header <chrono>
constexpr std::chrono::weekday operator+( const
std::chrono::weekday& wd, (1) (since C++20)
const std::chrono::days& d ) noexcept;
constexpr std::chrono::weekday operator+( const std::chrono::days&
d, (2) (since C++20)
const std::chrono::weekday& wd ) noexcept;
constexpr std::chrono::weekday operator-( const
std::chrono::weekday& wd, (3) (since C++20)
const std::chrono::days& d ) noexcept;
constexpr std::chrono::days operator-( const std::chrono::weekday&
wd1, (4) (since C++20)
const std::chrono::weekday& wd2 ) noexcept;


1-2) Adds d.count() days to wd. The weekday value held in the result is computed by
first evaluating static_cast<long long>(wd.c_encoding()) + d.count() and reducing it
modulo 7 to an integer in the range [0, 6].
3) Subtracts d.count() days from wd. Equivalent to return wd + -d;
4) If wd1.ok() and wd2.ok() are both true, returns a std::chrono::days value d such
that d.count() is in the range [0, 6] and wd2 + d == wd1. Otherwise the returned
value is unspecified.

Return value


1-3) A std::chrono::weekday holding a weekday value calculated as described above.
4) A std::chrono::days representing the distance between wd1 and wd2.

Notes


As long as the computation doesn't overflow, (1-3) always return a valid weekday
even if wd.ok() is false.

Example

// Run this code


#include <iostream>
#include <chrono>


int main()
{
std::cout << std::boolalpha;


std::chrono::weekday wd {4};
wd = wd + std::chrono::days(2);
std::cout << (wd == std::chrono::weekday(6)) << ' '
<< (wd == std::chrono::Saturday) << ' ';


wd = wd - std::chrono::days(3);
std::cout << (wd == std::chrono::weekday(3)) << ' '
<< (wd == std::chrono::Wednesday) << ' ';


wd = std::chrono::Tuesday;
wd = wd + std::chrono::days{8}; // (((2 + 8) == 10) % 7) == 3;
std::cout << (wd == std::chrono::Wednesday) << ' ';


wd = wd + (std::chrono::Sunday - std::chrono::Thursday); // (3 + 3) == 6
std::cout << (wd == std::chrono::Saturday) << '\n';
}

Output:


true true true true true true

See also


operator++
operator++(int) increments or decrements the weekday
operator-- (public member function)
operator--(int)
operator+= adds or subtracts a number of days
operator-= (public member function)

2022.07.31 http://cppreference.com