Page 1 of 1

Clarification for 7–5–1

Posted: Mon Jan 12, 2009 9:48 am
by pkruk
A function shall not return a reference or a pointer to an automatic variable (including parameters), defined within the function.
I have a question about reference types. Is the following code compliant or not?

Code: Select all

int global_var;

int & foo(int & ref) {
    return ref;             // Compliant?
    
    int & global_ref = global_var;
    return global_ref;      // Compliant?
    
    int local_var;
    int & local_ref = local_var;
    return local_ref;       // Compliant?
}

int * bar(int & ref) {
    return &ref;            // Compliant?

    int & global_ref = global_var;
    return &global_ref;     // Compliant?
    
    int local_var;
    int & local_ref = local_var;
    return &local_ref;      // Compliant?
}

Re: Clarification for 7–5–1

Posted: Mon Oct 05, 2015 3:02 pm
by misra cpp
In foo() and bar():
  • The first return is compliant with 7-5-1 but breaks 7-5-3.
  • The second return is compliant as the object is global.
  • The third return is non-compliant.