This implements the new type trait common_ref that is needed for library concepts support
Fair. I'd at least encourage the use of a _requires-clause_, since it's demonstrably faster to compile than SFINAE and is being commit for the first time to a concepts-aware compiler.
That sounds reasonable. However, someone could theoretically use a C++20 compiler (aka clang 9) without concept support and that would lead to <type_traits> not compiling.
On the other hand I think that is a very bad use case that should not be suported. Maintainers thoughts?
I think it's entirely fine to use requires clauses if it simplifies the implementation. I have little sympathy for someone trying to use this with a compiler that doesn't support concepts, or with a compiler that does but with concepts disabled.
@miscco I took this patch and reworked it slightly in D96657 so that it's a bit closer to the standard wording (it's a separate patch because I didn't want to overwrite your implementation with such a drastic change).
Are you okay with this, or have I overlooked an advantage to you moving some of COMMON-REF into common_reference?