std::invoke and std::invoke_r are fairly expensive in debug builds,
and are used extensively by standard ranges. By lifting these functions
into the compiler, we save a fair amount of space and improve run-time.
The changes in this commit were used to build a slightly modified
version of range-v3. range-v3 normally rolls its own invoke as a
function object, so the experiment deleted that code in favour of
using std::invoke.
Build time | Build directory size | CTest time | |
---|---|---|---|
libstdc++ w/o D130867 | User: 465.04s | 478504 bytes | 13.19s |
Sys: 58.98s | (468 MB) | ||
libstdc++ w/ D130867 | User: 468.49s | 456936 bytes | 7.79s |
Sys: 57.31s | (457 MB) | ||
libc++ w/o D130867 | User: 627.67s | 795652 bytes | 11.88s |
Sys: 67.16s | (778 MB) | ||
libc++ w/ D130867 | User: 626.03s | 781392 bytes | 8.32s |
Sys: 65.77s | (764MB) |
Something's off here, what's a "wrapee"? ("to be a wrapee to a class compatible" doesn't seem grammatically correct.)