cpp/experimental/ranges/type traits/is swappable

@1@ If the expressions and  are both well-formed when treated as an unevaluated operand, provides the member constant  equal. Otherwise, is. Access checks are performed as if from a context unrelated to either type. @2@ If is not a referenceable type (i.e., possibly cv-qualified  or a function type with a cv-qualifier-seq or a ref-qualifier), provides a member constant  equal to. Otherwise, provides a member constant equal to. @3@ Same as, but evaluations of both expressions from are known not to throw exceptions. @4@ Same as, but uses.

and shall each be a complete type, (possibly cv-qualified), or an array of unknown bound. Otherwise, the behavior is undefined.