Change in [class.temporary] (6.7.7) paragraph 1:
Temporary objects are created:[…]
- […]
- when needed by the implementation to pass or return an object of
trivially-copyabletrivially transferrable type (see below), and- […]
Change in [class.temporary] (6.7.7) paragraph 3:
Drafting note: the Itanium C++ ABI uses the term "non-trivial for the purposes of calls" to denote the types that are required to be passed indirectly. The intent is that every type is exactly one of:When an object of class type X is passed to or returned from a function, ifA type X is trivially transferrable ifWhen an object of trivially transferrable type is passed to or returned from a function, implementations are permitted to create a temporary object to hold the function parameter or result object. The temporary object is constructed from the function argument or return value, respectively, and the function's parameter or return object is initialized from the temporary object. For a parameter or return object of class type, the initialization is performed as if by using the eligible trivial constructor
- X is a scalar type, or
- X is a class type that has at least one eligible copy or move constructor (11.4.3), each such constructor is trivial, and the destructor of X is either trivial or deleted.
to copy the temporary(even if that constructor is inaccessible or would not be selected by overload resolution to perform a copy or move of the temporary object). [Note: This latitude is granted to allow objectsof class typeto be passed to or returned from functions in registers. — end note]