Open source developer of Doxide for modern C++ documentation, and Birch for probabilistic programming.
C++ @programming.dev Pattern Matching Template Types
Jekyll - Static sites generator @programming.dev Jekyll-Responsive-Magick v1.3.0 Released
C++ @programming.dev Overloading the Spaceship Operator, A Recipe
C++ @programming.dev Forwarding references, overload resolution, and seizing back control
C++ @programming.dev C++: Disable implicit conversion in specific contexts only
C++ @programming.dev Combinatorial instantiation of C++ templates with std::variant





Yes, std::remove_cvref_t combines the other two, in fact I believe it does so precisely (see the "Possible Implementation" on cppreference.com). The "...with a little extra" that I mention for std::decay_t in the article is that it does the same as std::remove_cvref_t plus some standardization of array and function types to pointer types (again, see the "Possible implementation" of it on cppreference.com). For my purposes it doesn't really matter which to use, and I mostly prefer std::decay_t for its brevity.