Here's what we use, and what i would propose to do with them:
- math
- factorial
- could use
std::tgamma, but it would be nice to know that it's exact for small values
- implement ourselves as in boost -- have a table for small values (i.e. where there is no floating point round-off, up to 22), then fall back to std::tgamma (which is really unnecessary)
- legendre
- in c++17, could implement ourselves (or as a table)
- constants (just pi)
- std::numbers in c++20, implement ourselves
- algorithm/clamp - in c++17, implement ourselves
- make_unique - update to c++14
- optional - in c++17
- variant - in c++17
Optional and variant are the tricky ones. Some options for those:
- add a wrapper that makes it work with either boost or c++17
- the behavior is a bit different so this may be tricky. This would be a pain to test, and we'd want to remove it eventually, which would be annoying again. It would also probably make the public interface unclear.
- update to c++17
- include our own implementations
- similar issues to the first option. IME this is a pain, as implementations of these are quite subtle, and nobody is interested in maintaining them now that they have been standardised
Here's what we use, and what i would propose to do with them:
std::tgamma, but it would be nice to know that it's exact for small valuesOptional and variant are the tricky ones. Some options for those: