Comments (2)
Hello @rmccampbell,
thanks for starting this conversation!
NRVO is tricky. It is an optimization performed by the compiler in the back end. C++ Insights looks at the front end. The thing that plays the major role here is guaranteed copy elison.
What C++ Insights shows is what Clang tells me. In the initial AST (https://godbolt.org/z/v8brhz16E) you see:
| `-ReturnStmt <line:19:5, col:12> nrvo_candidate(Var 0xba30518 'c' 'C')
| `-CXXConstructExpr <col:12> 'C' 'void (C &&)'
| `-ImplicitCastExpr <col:12> 'C' xvalue <NoOp>
| `-DeclRefExpr <col:12> 'C' lvalue Var 0xba30518 'c' 'C'
Notice that it says nrvo_candidate
at this point. The compiler may decide differently. However, I will use that information and keep the variable in that case. A fix is on its way.
Andreas
from cppinsights.
I wonder if it would make sense to add another comment to the return statement to emphasize that NRVO is happening (in case the variable declaration is far away)?
from cppinsights.
Related Issues (20)
- Pack expansion in ctor call transformed into invalid c++
- Class template argument deduction not working - cpp17 HOT 2
- Add support for `SourceLocExpr` HOT 4
- Build on visualstudio 2019 get ascii, utf errors HOT 1
- Variant initialization improvisation (suggestion) HOT 4
- std::move redundant?? HOT 5
- crash when parse cpp file HOT 1
- different result from godbolt HOT 1
- Incorrect move-only lambda code generation HOT 1
- Superfluous parentheses in declarations are handled incorrectly HOT 4
- Show initialization of non-local variables
- explicit casting for const HOT 2
- Segmentation Fault: Stack dump without symbol names HOT 1
- structured binding with lambda reports 'Segmentation fault' HOT 1
- Structure binding variables is rvalue reference? HOT 2
- How do I use it with cmake project HOT 2
- can not open "libxml2s.lib" ??? what is "libxml2s.lib" ? from where? HOT 4
- Static casts missing with inherited classes
- Lambda Capture Variable Not Used in Generated Code
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cppinsights.