vbvictor wrote:

Thank you for the fast feedback.
As for general approach, I will limit the usage to classes that are marked 
`const` and provide reference to `misc-const-correctness` in docs. Also, I will 
add support for initializer-list constructors.
However, I think we should not give warning for container-classes that are 
constructed from a couple of elements, e.g. `std::vector<int> v{1, 2, 3}`. 

So my next actions will be:
- Add `const` as a must
- Add support for init-list ctors
- Add option `ContainerClasses` and `ContainerElementThreshold` - this will 
match only containers which has more than `ContainerElementThreshold` elements 
in their init-list.
- Rename option `CheckedClasses` to `ReusableClasses` - those will be classes 
with same semantics as `std::regex` - their constructors are expensive no 
matter what.

However, if I make such improvements we would still NOT match many cases, e.g.
```cpp
std::vector<int> v = {1, 2, 3} // match
std::vector<std::string> = {"foo", "bar"} // not match
std::map<int, int> m = {{1, 1}, {2, 2}}; // not match
```
Because here we have `std::initializer_list<std::string>` and  
`std::initializer_list<std::pair<int, int>>` as ctor-parameters and the check 
may not mark `std::pair` and `std::string` as "literal-expressions".

With this in mind, should I even try to work with containers or leave It only 
to `regex`-like objects?
As for now, I see little benefits from matching a very small portion of 
container-usages.
What about separating this check in two: `construct-reusable-objects-once` and 
`initialize-big-containers-once`?

https://github.com/llvm/llvm-project/pull/131455
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to