File tree Expand file tree Collapse file tree 2 files changed +27
-0
lines changed
cpp/ql/test/query-tests/jsf/4.10 Classes/AV Rule 82 Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Original file line number Diff line number Diff line change @@ -181,11 +181,35 @@ class Forgivable {
181181 Forgivable operator =(int *_val);
182182};
183183
184+ // This template has structure similar to `std::enable_if`.
185+ template <typename S, typename T>
186+ struct second {
187+ typedef T type;
188+ };
189+
190+ struct TemplatedAssignmentGood {
191+ template <typename T>
192+ typename second<T, TemplatedAssignmentGood &>::type operator =(T val) { // GOOD [FALSE POSITIVE]
193+ return *this ;
194+ }
195+ };
196+
197+ struct TemplatedAssignmentBad {
198+ template <typename T>
199+ typename second<T, TemplatedAssignmentBad>::type operator =(T val) { // BAD (missing &)
200+ return *this ;
201+ }
202+ };
203+
184204int main () {
185205 Container c;
186206 c = c;
187207 TemplateReturnAssignment<int > tra (1 );
188208 tra = 2 ;
189209 tra = true ;
210+ TemplatedAssignmentGood taGood;
211+ taGood = 3 ;
212+ TemplatedAssignmentBad taBad;
213+ taBad = 4 ;
190214 return 0 ;
191215}
Original file line number Diff line number Diff line change 22| AV Rule 82.cpp:24:8:24:16 | operator= | Assignment operator in class Bad2 should have return type Bad2&. Otherwise a copy is created at each call. |
33| AV Rule 82.cpp:63:29:63:29 | operator= | Assignment operator in class TemplateReturnAssignment<int> does not return a reference to *this. |
44| AV Rule 82.cpp:63:29:63:37 | operator= | Assignment operator in class TemplateReturnAssignment<T> does not return a reference to *this. |
5+ | AV Rule 82.cpp:192:55:192:63 | operator= | Assignment operator in class TemplatedAssignmentGood does not return a reference to *this. |
6+ | AV Rule 82.cpp:199:52:199:52 | operator= | Assignment operator in class TemplatedAssignmentBad does not return a reference to *this. |
7+ | AV Rule 82.cpp:199:52:199:60 | operator= | Assignment operator in class TemplatedAssignmentBad does not return a reference to *this. |
You can’t perform that action at this time.
0 commit comments