This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of WP status.

### 3467. `bool` can't be an integer-like type

Section: 23.3.4.4 [iterator.concept.winc] Status: WP Submitter: Casey Carter Opened: 2020-07-23 Last modified: 2020-11-09

Priority: 0

View all other issues in [iterator.concept.winc].

View all issues with WP status.

Discussion:

Per 24.2 [ranges.syn]/1, the Standard Library believes it can convert an integer-like type `X` to an unsigned integer-like type with the exposition-only type alias `make-unsigned-like-t`. `make-unsigned-like-t<X>` is specified as being equivalent to `make_unsigned_t<X>` when `X` is an integral type. However, despite being an integral type, `bool` is not a valid template type argument for `make_unsigned_t` per [tab:meta.trans.sign].

This problem with `bool` was an oversight when we added support for integer-like types: it was certainly not the design intent to allow `ranges::size(r)` to return `false`! While we could devise some more-complicated metaprogramming to allow use of `bool`, it seems easier — and consistent with the design intent — to simply exclude `bool` from the set of integer-like types.

[2020-08-02; Reflector prioritization]

Set priority to 0 and status to Tentatively Ready after six votes in favour during reflector discussions.

[2020-11-09 Approved In November virtual meeting. Status changed: Tentatively Ready → WP.]

Proposed resolution:

This wording is relative to N4861.

1. Modify 23.3.4.4 [iterator.concept.winc] as indicated:

   > -11- A type `I` other than `cv bool` is integer-like if it models `integral<I>` or if it is an integer-class type. An integer-like type `I` is signed-integer-like if it models `signed_integral<I>` or if it is a signed-integer-class type. An integer-like type `I` is unsigned-integer-like if it models `unsigned_integral<I>` or if it is an unsigned-integer-class type.