lang.cpp: In instantiation of 'double Data<T, Hash>::operator&(const Data<T, Hash>&) const [with T = int; Hash = std::hash<int>]':
lang.cpp:57:20: required from here
lang.cpp:26:39: error: 'const struct Data<int, std::hash<int> >' has no member named 'contains'
26 | ret += magic((double) v / tot - (o.contains(k) ? (double) o.at(k) / o.tot : 0));
| ~~^~~~~~~~
lang.cpp:26:64: error: 'const struct Data<int, std::hash<int> >' has no member named 'at'
26 | ret += magic((double) v / tot - (o.contains(k) ? (double) o.at(k) / o.tot : 0));
| ~~^~
lang.cpp:29:18: error: 'const struct Data<int, std::hash<int> >' has no member named 'contains'
29 | if (not this->contains(k)) ret += magic((double) v / o.tot);
| ~~~~~~^~~~~~~~
lang.cpp: In instantiation of 'double Data<T, Hash>::operator&(const Data<T, Hash>&) const [with T = std::pair<int, int>; Hash = phash]':
lang.cpp:57:38: required from here
lang.cpp:26:39: error: 'const struct Data<std::pair<int, int>, phash>' has no member named 'contains'
26 | ret += magic((double) v / tot - (o.contains(k) ? (double) o.at(k) / o.tot : 0));
| ~~^~~~~~~~
lang.cpp:26:64: error: 'const struct Data<std::pair<int, int>, phash>' has no member named 'at'
26 | ret += magic((double) v / tot - (o.contains(k) ? (double) o.at(k) / o.tot : 0));
| ~~^~
lang.cpp:29:18: error: 'const struct Data<std::pair<int, int>, phash>' has no member named 'contains'
29 | if (not this->contains(k)) ret += magic((double) v / o.tot);
| ~~~~~~^~~~~~~~