Hello,

I don't have anything to add to the threads topic itself, but was 
triggered by something:

On Tue, 26 Nov 2024, Jonathan Wakely wrote:

> > >   const size_t __bufsz = __deque_buf_size(sizeof(_Tp));
> > ...
> > I wonder why "const" is useful here.
> 
> Because if you don't initialize a constant expression, then you get a
> runtime call to __deque_buf_size instead, which then has to be
> inlined.

Hmm?  Are you saying there's a difference in inlining (or other) 
behaviour between the two initializer lines in foo:

   extern int bla(void);
   int foo (void) {
     const int x = bla();
     int y = bla();
     return x + y;
   }

That would be surprising.  Would it change if 'bla' was not a extern 
function but something marked specially, constexpr or member function or 
similar?  But that would also be surprising to me.

I.e. ...

> Using the call to initialize a const size_t ensures it's a constant
> expression, and there's nothing for the inliner to do.

... why would a cv qualifier on the non-reference LHS of an initialization 
put any constraints on the kind of expressions on the RHS?


Ciao,
Michael.

Reply via email to