Monday, June 6, 2022

[SOLVED] Why does GCC say "named return values no longer supported"?

Issue

I accidentally put the opening brace of my function definition after the return statement

int id(int k) return k; { }

But GCC answered with a weird error message

error: named return values are no longer supported

Can anyone please explain what that weird feature might be? I've never heard about it.


Solution

See here - early NRVO implementation by explicit definition of the named return value in the function header.

Native support for NRVO without this extension was added here - GCC 3.1 Release Series.

Brief cut and paste for context:

G++ now supports the "named return value optimization": for code like

A f () {
  A a;
  ...
  return a;
}

G++ will allocate a in the return value slot, so that the return becomes a no-op. For this to work, all return statements in the function must return the same variable.



Answered By - Steve Townsend
Answer Checked By - Gilberto Lyons (WPSolving Admin)