__cpp_lib_remove_cvref : does this need a macro? It seems like code wishing to support old compilers could define it themselves or unconditionally use remove_reference + remove_cv (I think this fails the "you lose nothing by always behaving like the feature is not present" test, unless I've overlooked a use case).
I wasn't sure about the traits. This one seems easily implantable (and the next two), so maybe not.
An implementation has access to tools that are not available in C++, and so can implement traits more efficiently than can a user. This:
namespace stuff {
#ifdef __cpp_lib_remove_cvref
using std::remove_cvref_t;
#else
// ... implement remove_cvref_t here ...
#endif
}
is more compile-time efficient on MSVC (were we to define __cpp_lib_remove_cvref, that is) than anything you can write for "implement remove_cvref_t here". Is that sufficient motivation to have feature-test macros even for traits that are easily implemented by hand?