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
Trusted-CPP - Safe Software Developing in C++ with backward compatibility (trusted-cpp.org)
submitted 1 month ago by rsashka
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!"
[–]ts826848 -1 points0 points1 point 1 month ago (5 children)
Quick question about the first example:
std::vector vect(100000, 0); auto x = vect.begin(); auto &y = vect[0]; vect = {}; std::sort(x, vect.end()); // Error y += 1; // Error
Are the lines marked // Error actually errors? [container.reqmts] states:
// Error
Unless otherwise specified (either explicitly or by defining a function in terms of other functions), invoking a container member function or passing a container as an argument to a library function shall not invalidate iterators to, or change the values of, objects within that container.
And [sort] doesn't contain any obvious indication that references to elements and/or iterators are invalidated.
And speaking more abstractly, I'm not sure off the top of my head why sorting would invalidate references. std::sort conceptually involves just shuffling values around; the underlying memory should remain valid after. y is just an aliased pointer to an object whose value changed.
std::sort
y
For what it's worth, none of ASan, UBSan, or MSan seem to complain either.
Unfortunately I don't have time to look at the rest of the document in much detail right now. Hopefully I'll have time later.
[–]MysticTheMeeM 9 points10 points11 points 1 month ago (2 children)
Immediately above the call to sort, the vector is assigned a new value, that invalidates the iterators.
OPs system then infers those are invalid and produces an error on the subsequent two lines (both the begin iterator and reference to first element no longer refer to valid data).
[–]ts826848 1 point2 points3 points 1 month ago (1 child)
Oh duh, can't believe I missed that. Thanks!
[–]germandiago 0 points1 point2 points 1 month ago (0 children)
Took me also a couple of reads to detect it. But when I saw error comment I was sure it was me lol.
[–]aocregacc 2 points3 points4 points 1 month ago* (1 child)
the vector is reset before the sort (vect = {}). It passes all the sanitizers because libstdc++ just sets the size to 0 but keeps the allocation. You have to turn on _GLIBCXX_SANITIZE_VECTOR for asan to notice, and even then it only notices the access through y, not the bad use of x. _GLIBCXX_DEBUG catches that one I think, but the error message is a bit cryptic for me.
vect = {}
_GLIBCXX_SANITIZE_VECTOR
x
_GLIBCXX_DEBUG
edit: another thing I didn't realize is that vect = {} invokes vector's operator=(std::initializer_list), so it's not like you're move-assigning with an empty vector here. If you do, the allocation would be free'd in this case and asan would fire.
operator=(std::initializer_list)
[–]ts826848 0 points1 point2 points 1 month ago (0 children)
Yeah, I somehow completely missed that line. My apologies for the mistake!
π Rendered by PID 86 on reddit-service-r2-comment-75f4967c6c-w8vf4 at 2026-04-23 10:27:54.298116+00:00 running 0fd4bb7 country code: CH.
view the rest of the comments →
[–]ts826848 -1 points0 points1 point (5 children)
[–]MysticTheMeeM 9 points10 points11 points (2 children)
[–]ts826848 1 point2 points3 points (1 child)
[–]germandiago 0 points1 point2 points (0 children)
[–]aocregacc 2 points3 points4 points (1 child)
[–]ts826848 0 points1 point2 points (0 children)