Draft: use C++20 to streamline functors
superset of !3993 (merged):
- use C++20
requires
instead of SFINAE to constrain templates. - use C++20 perfect parameter pack captures in lambdas
NOTE: as a result of the above, building the code on the x86_64_v3-el9-gcc12+cuda12_1-opt+g platform will fail (if there is a very good reason to do so, this could be worked around by using the preprocessor to basically keep the 'old' code for any non-C++20 platform)
Edited by Gerhard Raven