On Thu, Dec 05, 2019 at 08:56:35PM +0000, Jonathan Wakely wrote: > On Thu, 5 Dec 2019 at 20:07, Segher Boessenkool > <seg...@kernel.crashing.org> wrote: > > On Thu, Dec 05, 2019 at 05:03:43PM +0000, Jonathan Wakely wrote: > > > C++17 introduces a nice feature, with rationale similar to declaring > > > variables in a for-loop init-statement:
> > > Unfortunately nearly every time I've tried to use this recently, I've > > > found it's impossible in 80 columns, e.g. this from yesterday: > > > > > > if (auto __c = __builtin_memcmp(&*__first1, &*__first2, __len) <=> > > > 0; __c != 0) > > > return __c; > > > > > > When you're forced to uglify every variable with a leading __ you run > > > out of characters pretty damn quickly. > > > > If using this "nice feature" forces you to uglify your code, then maybe > > it is not such a nice feature, and you should not use it. > > The uglification has absolutely nothing to do with the 'if' > init-statement feature, all code in libstdc++ headers has to be > uglified, always. Blame the C preprocessor for that, not C++ features. > > My point is that 80 characters runs out quicker when 10% of it goes on > visual noise that's only needed because the C preprocessor means we > can't have nice names. (Not sure where the preprocessor comes in, these underscores are just to satisfy language rules afaics, but maybe you mean something else?) Or you could write auto __c = (__builtin_memcmp(&*__first1, &*__first2, __len) <=> 0); if (__c) return __c; which is much easier to read, to my eyes anyway. And it is exactly the same for the compiler. Wrapping everything inside-out just for the artificial goal of having things defined in slightly tighter scopes feels futile. Segher