this post was submitted on 02 Sep 2025
17 points (100.0% liked)

C++

2151 readers
4 users here now

The center for all discussion and news regarding C++.

Rules

founded 2 years ago
MODERATORS
all 15 comments
sorted by: hot top controversial new old
[–] sukhmel@programming.dev 10 points 2 months ago* (last edited 2 months ago) (1 children)

Summary

If you want fast compile times, be careful with functions using auto as a return type in header files.

[–] LodeMike@lemmy.today 3 points 2 months ago (3 children)

Why the fuck do people do this to themselves.

[–] DapperPenguin@programming.dev 3 points 2 months ago (1 children)

From my discussion with C++ folk, auto is just part of the "modern" way of doing c++. Paired with the -> return type. Perhaps including that -> return type negates this problem? It's still strange to me. Feels more like Rust

[–] bitcrafter@programming.dev 2 points 2 months ago

One day the use of auto will grow so extensive that modern Python code will have more type annotations than modern C++ code!

[–] 6nk06@sh.itjust.works 1 points 1 month ago

Clean code, and compile-time is irrelevant for most projects.

[–] fruitcantfly@programming.dev 8 points 2 months ago

This is interesting, but drawing conclusions from only two measurements is not reasonable. Especially so when the time-span measured is in the order of a few ms. For example, the two instances of clang might not be running at the same clock frequency, which could easily explain away the observed difference.

Plus, you could easily generate a very large number of functions, to increase the amount of work the compiler has to do. So I did just that (N = 10,000), using the function from the article, and used hyperfine to perform the actual benchmarking.

  • With int
    Benchmark 1: clang -o /dev/null test.cpp -c
      Time (mean ± σ):      1.243 s ±  0.018 s    [User: 1.192 s, System: 0.050 s]
      Range (min … max):    1.221 s …  1.284 s    10 runs
    
  • With auto
    Benchmark 1: clang -o /dev/null test.cpp -c
      Time (mean ± σ):      1.291 s ±  0.015 s    [User: 1.238 s, System: 0.051 s]
      Range (min … max):    1.274 s …  1.320 s    10 runs
    

So if you have a file with 10'000 simple functions with/without auto, then it increases your compile time by ~4%.

I'd worry more about the readability of auto, than about the compile time cost at that point

[–] Speiser0@feddit.org 1 points 2 months ago (1 children)

If a function body is expensive to parse, isn't it then a complex function body that shouldn't go into the header anyways?

[–] lambalicious@lemmy.sdf.org 4 points 2 months ago (1 children)

If it's templated / generic, which IIRC is one of the reasons to try and use auto, then it has to go in the header anyway.

[–] bunitor@lemmy.eco.br 1 points 2 months ago (1 children)

technically it doesn't have to (you can always create a .tpp (which is still technically a header, i know, but it isn't a header header)), but i get what you mean

[–] lambalicious@lemmy.sdf.org 1 points 2 months ago

I mean it has to functionally be a header. Could even be a .c file, filename extensions stopped mattering before we even had C++03 and that's saying something!