What is the difference to static_cast<unsigned int>(size())
(or some suitably longer <size_t> type)
Or you want to definitely have functions differentiated (overloaded) by return type?
-----Ursprüngliche Nachricht-----
Von: Frederick Virchanza Gotham via Std-Proposals <std-proposals@lists.isocpp.org>
Gesendet: Do 09.10.2025 13:43
Betreff: Re: [std-proposals] ranges::size should always return a unsigned integer
An: std-proposals@lists.isocpp.org;
CC: Frederick Virchanza Gotham <cauldwell.thomas@gmail.com>;
On Wednesday, October 8, 2025, Yexuan Xiao wrote:Why is it allowed to return a signed integer? C++ users are accustomed to the fact that the size_type of containers is an unsigned integer, so the size of containers should also return an unsigned integer.- - - - - - - Begin Half-baked Idea - - - - - - -What if we could define a function (or member function) as follows:+|- int size(void);The trigraph, +|- , at the beginning indicates that the function has two forms: one returning signed, and one returning unsigned.So then when you want to invoke the function, you get the unsigned version as follows:auto x = size();and you get the signed version as follows:auto x = +|- size();Similarly you would ake the address of the function as follows:int (*p1)(void) = &size;unsigned (*p2)(void) = & +|- size;I would add the stipulation that both of these function pointers can compare equal (because they'll most likely have the same machine code anyway since Two's Complement is now mandatory).-- Std-Proposals mailing list Std-Proposals@lists.isocpp.org https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals