== Why is this an issue? It is implementation-defined behaviour whether the reference parameter is a temporary object or a reference to the parameter. If the implementation uses a local copy (temporary object), this will be destroyed when the function returns. Any attempt to use such an object after its destruction will lead to undefined behaviour. === Noncompliant code example [source,cpp] ---- int32_t * fn1 ( int32_t & x ) { return &x ; // Noncompliant } const int32_t * fn3 ( const int32_t & x ) { return &x ; // Noncompliant } int32_t & fn4 ( int32_t & x ) { return x ; // Noncompliant } const int32_t & fn5 ( const int32_t & x ) { return x ; // Noncompliant } ---- == Resources * MISRA {cpp}:2008, 7-5-3 ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message The returned value is a [pointer||reference] to a parameter that is passed by reference. ''' == Comments And Links (visible only on this page) === relates to: S946 === on 16 Oct 2014, 14:37:12 Ann Campbell wrote: \[~samuel.mercier] * need a See section * I think you missed the mark on the message. The title makes clear that the param being returned was initially received as a reference, so advice to refactor to a reference param doesn't make a lot of sense to me. Instead, I'd advise switching to a ``++void++`` return. endif::env-github,rspecator-view[]