cpp/types/reference constructs from temporary

Let be  if  is a scalar type or cv, or  otherwise. If is a reference type, and given a hypothetic expression  such that  is, the variable definition  is well-formed and binds a temporary object to , then provides the member constant  equal to. Otherwise, is.

If is an lvalue reference type to a const- but not volatile-qualified object type or an rvalue reference type, both  and  shall be complete types, cv, or an arrays of unknown bound; otherwise the behavior is undefined.

If an instantiation of a template above depends, directly or indirectly, on an incomplete type, and that instantiation could yield a different result if that type were hypothetically completed, the behavior is undefined.