namespace std::chrono {
class weekday {
unsigned char wd_; // *exposition only*
public:
weekday() = default;
constexpr explicit weekday(unsigned wd) noexcept;
constexpr weekday(const sys_days& dp) noexcept;
constexpr explicit weekday(const local_days& dp) noexcept;
constexpr weekday& operator++() noexcept;
constexpr weekday operator++(int) noexcept;
constexpr weekday& operator--() noexcept;
constexpr weekday operator--(int) noexcept;
constexpr weekday& operator+=(const days& d) noexcept;
constexpr weekday& operator-=(const days& d) noexcept;
constexpr unsigned c_encoding() const noexcept;
constexpr unsigned iso_encoding() const noexcept;
constexpr bool ok() const noexcept;
constexpr weekday_indexed operator[](unsigned index) const noexcept;
constexpr weekday_last operator[](last_spec) const noexcept;
};
}

weekday represents a day of the week in the civil calendar.

It normally holds values in the range 0 to 6,
corresponding to Sunday through Saturday, but
it may hold non-negative values outside this range.

It can be constructed with any unsigned value,
which will be subsequently truncated to fit into weekday's unspecified internal storage.

[*Note 1*: *end note*]

weekday is not
*Cpp17LessThanComparable*
because there is no universal consensus on which day is the first day of the week.

weekday's arithmetic operations treat the days of the week as a circular range,
with no beginning and no end.

— ```
constexpr explicit weekday(unsigned wd) noexcept;
```

```
constexpr weekday(const sys_days& dp) noexcept;
```

```
constexpr explicit weekday(const local_days& dp) noexcept;
```

```
constexpr weekday& operator++() noexcept;
```

```
constexpr weekday operator++(int) noexcept;
```

```
constexpr weekday& operator--() noexcept;
```

```
constexpr weekday operator--(int) noexcept;
```

```
constexpr weekday& operator+=(const days& d) noexcept;
```

```
constexpr weekday& operator-=(const days& d) noexcept;
```

```
constexpr unsigned c_encoding() const noexcept;
```

```
constexpr unsigned iso_encoding() const noexcept;
```

```
constexpr bool ok() const noexcept;
```

```
constexpr weekday_indexed operator[](unsigned index) const noexcept;
```

```
constexpr weekday_last operator[](last_spec) const noexcept;
```

```
constexpr bool operator==(const weekday& x, const weekday& y) noexcept;
```

```
constexpr weekday operator+(const weekday& x, const days& y) noexcept;
```

```
constexpr weekday operator+(const days& x, const weekday& y) noexcept;
```

```
constexpr weekday operator-(const weekday& x, const days& y) noexcept;
```

```
constexpr days operator-(const weekday& x, const weekday& y) noexcept;
```

```
template<class charT, class traits>
basic_ostream<charT, traits>&
operator<<(basic_ostream<charT, traits>& os, const weekday& wd);
```

```
template<class charT, class traits, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(basic_istream<charT, traits>& is, const charT* fmt,
weekday& wd, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
```

If the parse fails to decode a valid weekday,
is.setstate(ios_base::failbit) is called and
wd is not modified.

If %Z is used and successfully parsed,
that value will be assigned to *abbrev if abbrev is non-null.

If %z (or a modified variant) is used and successfully parsed,
that value will be assigned to *offset if offset is non-null.