C++ Logo

std-discussion

Advanced search

Re: Rationale for return type of the non-array version of std::ssize()

From: Gennaro Prota <gennaro.prota_at_[hidden]>
Date: Tue, 28 Apr 2020 15:47:55 +0200
On Tue, Apr 28, 2020 at 3:36 PM Bo Persson via Std-Discussion
<std-discussion_at_[hidden]> wrote:
>
> On 2020-04-28 at 15:18, Gennaro Prota via Std-Discussion wrote:
> > On Tue, Apr 28, 2020 at 1:43 PM Bo Persson via Std-Discussion
> > <std-discussion_at_[hidden]> wrote:
> >>
> >> On 2020-04-28 at 12:46, Gennaro Prota via Std-Discussion wrote:
> >>> Hi All,
> >>>
> >>> what is the reason why the non-array version of std::ssize() returns
> >>>
> >>> std::common_type_t<std::ptrdiff_t, std::make_signed_t<decltype(c.size())>>
> >>>
> >>> rather than just
> >>>
> >>> std::ptrdiff_t
> >>>
> >>> ?
> >>>
> >>> Thanks a lot.
> >>>
> >>
> >> The containers size_type is not required to be convertible to ptrdiff_t.
> >> This will try to find some other type in that case.
> >
> > Isn't a container's size_type guaranteed to be an unsigned integer type?
> >
>
> Maybe, but *what* integer type?

I think any integer type is convertible to ptrdiff_t.

> How about user defined containers?

Could they use a UDT for size_type and make it non-convertible to any
integral type? In which case, for ssize() to work, they should
specialize common_type?

> And C++20 std::span *almost* got a signed size() function. But perhaps
> it is a view and not a container. :-)

Yeah. Well, even a *signed* integral type is convertible to ptrdiff_t
:-)

-- 
--
.:: Gennaro Prota ::.
.:: https://about.me/gennaro.prota ::.

Received on 2020-04-28 08:51:33