plasma-umass / cwhy

"See why!" Explains and suggests fixes for compile-time errors for C, C++, C#, Go, Java, LaTeX, PHP, Python, Ruby, Rust, and TypeScript
Apache License 2.0
273 stars 6 forks source link

Add cost estimation on text completion #38

Closed nicovank closed 11 months ago

nicovank commented 11 months ago

Warning This depends on #37. Wish GitHub had some stacked diff capability.

% clang++ -std=c++20 tests/c++/missing-hash.cpp |& cwhy --llm gpt-4
The problem is that `std::hash` does not provide a specialization for
`std::pair<int, int>`. This means that you can't use `std::hash` with
`std::pair<int, int>`, hence the error. As a result, when you declare
an `std::unordered_set<std::pair<int, int>>`, the compiler is trying
to create an `std::hash<std::pair<int, int>>`, and failing because it
doesn't exist.

You could define a custom hash function for `std::pair<int, int>` and
use it in your `std::unordered_set`.

Here's an example:

```c++
struct pair_hash {
    template <class T1, class T2>
    std::size_t operator () (const std::pair<T1, T2> &pair) const {
        return std::hash<T1>()(pair.first) ^ std::hash<T2>()(pair.second);
    }
};

std::unordered_set<std::pair<int, int>, pair_hash> visited;

In this code, pair_hash is a functor that computes a hash value for std::pair<int, int> objects. This hash function is then used in the std::unordered_set declaration.

This request cost ~ 0.12$.