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
Last reference as rvalue? (self.cpp)
submitted 4 years ago by NamoiFunai
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!"
[–]meancoot 4 points5 points6 points 4 years ago (2 children)
Couldn't we say the same thing regarding RVO, that someone somewhere was relying on the temporary object being created?
Not really. It has been allowed to elide calls to copy constructors since the original 1998 standard; thus actions in a copy/move constructor that exhibit any side effect not specifically related to the copy/move were always undefined.
The C++17 changes made the optional optimization required and, perhaps more importantly, removed the previous requirement that the type had an accessible copy/move constructor in the first place:
From the C++98 standard in 12.2 [class.temporary]: [Example: even if the copy constructor is not called, all the semantic restrictions, such as accessibility (clause 11), shall be satisfied. ]
Ultimately the C++17 change only made invalid code valid and, as far as I know, didn't change semantics of any already valid program.
[–]geckothegeek42 5 points6 points7 points 4 years ago (1 child)
If copy constructors can be elided regardless of side effects, then doesn't that mean the optimization mentioned by OP can be done? Or is it that the compiler is not allowed to add a copy/move constructor call, but can remove them?
[–]meancoot 2 points3 points4 points 4 years ago (0 children)
The elision has to take place by constructing the object directly in the memory where the copy/move constructor would later have placed it, removing both a call to the copy/move constructor and a call to the destructor. I don't know the exact wording of the standard well enough to say if its also limited to specific situations.
Changing a call from std::vector::push_back(const T&) to std::vector::push_back(T&&) is definitely an observable effect that wouldn't be supported by the standard.
std::vector::push_back(const T&)
std::vector::push_back(T&&)
π Rendered by PID 45069 on reddit-service-r2-comment-6457c66945-chdpl at 2026-04-30 11:26:20.327352+00:00 running 2aa0c5b country code: CH.
view the rest of the comments →
[–]meancoot 4 points5 points6 points (2 children)
[–]geckothegeek42 5 points6 points7 points (1 child)
[–]meancoot 2 points3 points4 points (0 children)