[llvm-dev] [RFC] Coding Standards: "prefer `int` for regular arithmetic, use `unsigned` only for bitmask and when you intend to rely on wrapping behavior."

Tim Northover via llvm-dev
Mon, 10 Jun 2019 21:44:47 -0000

On Mon, 10 Jun 2019 at 22:04, Mehdi AMINI via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> I'd appreciate if you guys could provide rational that address the
extensive arguments and opinion provided in the C++ community that I tried to
summarize in the link above.
> Otherwise I don't know what to take out of unmotivated "+1".

Yeah, I want to make it clear that I am in favour of "int" as a
default, even if preparatory changes are needed to get there. My main
reservation was over the loops

    for (int i = 0; i != static_cast<int>(X.size()); ++i)

required to satisfy compilers when *::size returns unsigned. I dislike the

    for (int i = 0, Size = X.size(); i != Size; ++i)

form that has traditionally been suggested because it's still horribly
verbose.

I hadn't even heard of the llvm::seq construct Chandler mentioned
though, and I think it addresses all my worries. It looks really neat
to me, and I'm not bothered by the duplicated "int".

So my current position is that I'm all in favour of switching to int,
with llvm::seq as the suggested alternative in for loops.

Cheers.

Tim.