pass TokenList as reference into ValueFlow::setValues()#4868
Conversation
If ever we want to use these classes with any generic function/algorithm(ie swap) then we do. These are fundamental operations on types. Making classes non-regular very much limits what we can do in the future. There is already certain types of analysis we can't do because |
Sorry, something went wrong.
Ok. Can we leave the parameter a reference and just store the pointer?
Could you please track those issues in tickets? Thanks. |
Sorry, something went wrong.
|
The |
Sorry, something went wrong.
Yes, parameters should be references, but member variables should not. |
Sorry, something went wrong.
And if I hand it out I could make it a reference again? That sounds like you should have something like a |
Sorry, something went wrong.
|
We want something like gsl::non_null. |
Sorry, something went wrong.
|
Sometimes I am just stupid - what about #4785? I was thinking about disallowing |
Sorry, something went wrong.
|
We already use this pattern all over the place and it is not an isolated case. So could we discuss this in the other ticket and merge this? I have a few more commits depending on this and IIRC those are just parameter and not member changes so things and even if things would just very, very slightly get worse. |
Sorry, something went wrong.
I dont think its helpful to have a non-owning pointer propagate const. It can be simply bypassed by copying the pointer: void f(const safe_ptr<int>& ptr) {
// *ptr += 1 doesnt compile, but the below does
auto ptr2 = ptr;
*ptr += 1;
}Its better to use |
Sorry, something went wrong.
Obviously - but those are not meant to be used outside of the class. It's to enforce the "physical constness" as far as possible and reducing the code which relies on "logical constness".
If it is |
Sorry, something went wrong.
f12375c to
35fc752
Compare
March 14, 2023 20:50
91345e1 to
2b33083
Compare
April 8, 2023 10:17
|
Another |
Sorry, something went wrong.
e011760 to
b403f49
Compare
April 29, 2023 10:39
danmar
left a comment
There was a problem hiding this comment.
Looks good to me
Sorry, something went wrong.
This avoid lots of unchecked pointer dereferences.
There was a single case which checked it and that looked like a leftover. The only way this might have been a
nullptrpointer was through several default constructors which were not used at all so I removed them.