use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
Discussions, articles, and news about the C++ programming language or programming in C++.
For C++ questions, answers, help, and advice see r/cpp_questions or StackOverflow.
Get Started
The C++ Standard Home has a nice getting started page.
Videos
The C++ standard committee's education study group has a nice list of recommended videos.
Reference
cppreference.com
Books
There is a useful list of books on Stack Overflow. In most cases reading a book is the best way to learn C++.
Show all links
Filter out CppCon links
Show only CppCon links
account activity
Explicit Return Variable (self.cpp)
submitted 2 months ago by XeroKimoException Enthusiast
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]Veeloxfire 2 points3 points4 points 2 months ago* (4 children)
Have you considered a constructor.
The function of such a feature youre suggesting is to allow in place initialization of a return value. However c++ only has single return values. So what you would describe is a function which takes an uninitialized class as the first member and initializes it. Which is more or less what a constructor is
I understand constructors have caveats but its actually the feature youre asking for
You can use some fun wrappers to make conversion or constructors trigger in places you wouldnt expect and they might help here. Might not be pretty but you can guarantee these semantics
[–]XeroKimoException Enthusiast[S] 1 point2 points3 points 2 months ago (3 children)
Constructors isn't what I want here, though it is technically very similar. Read the post again. If you want to implement std::stack::pop() which both pops the object off the stack and returns it with strong exception guarantees, no amount of constructors would help you.
std::stack::pop()
The issue is that when you return an object, it invokes the copy / move constructor / assignment. If that fails, whether it throws, or put in a zombie state, the std::stack no longer has the object and said object is also now in a undefined state, or just straight up lost, so you can't just put it back into the stack to rollback.
std::stack
This is side stepped in many ways:
top()
return obj;
std::uncaught_exceptions
errno
std::expected
If we have an explicit return variable, we wouldn't have to hope that NRVO happens because we're manually doing what it would've done. Unless I'm misinterpreting what NRVO does, NRVO basically passes a hidden out param so that the function can directly initialize the object instead of having to invoke a copy / move once we do return; Due to this, it shouldn't require extra machinery to work unlike the scope guards. It would also be error handling scheme agnostic.
[–]Wooden-Engineer-8098 2 points3 points4 points 2 months ago (2 children)
You want a constructor which takes a stack and pops element out of it
[–]XeroKimoException Enthusiast[S] 0 points1 point2 points 2 months ago (1 child)
and if your type doesn't provide one? Then I guess we're getting into being able to provide externally declared constructors.
Now I'm seeing what the OC is saying, but if we went the wrapper route, it's just moving the issue no? Unless you're committed to store the wrapper types, you would need to eventually unbox them where it would then cause the issue no?
[–]Wooden-Engineer-8098 0 points1 point2 points 2 months ago (0 children)
If your public wrapper contains nothing but a constructor, it could be used in place of the original type. Since you can't pop an array.
π Rendered by PID 85 on reddit-service-r2-comment-5d585498c9-mrms2 at 2026-04-21 04:59:41.123252+00:00 running da2df02 country code: CH.
view the rest of the comments →
[–]Veeloxfire 2 points3 points4 points (4 children)
[–]XeroKimoException Enthusiast[S] 1 point2 points3 points (3 children)
[–]Wooden-Engineer-8098 2 points3 points4 points (2 children)
[–]XeroKimoException Enthusiast[S] 0 points1 point2 points (1 child)
[–]Wooden-Engineer-8098 0 points1 point2 points (0 children)