diff --git a/src/typechecker/typechecker.cpp b/src/typechecker/typechecker.cpp index 56d1d5f..4117abd 100644 --- a/src/typechecker/typechecker.cpp +++ b/src/typechecker/typechecker.cpp @@ -308,12 +308,13 @@ namespace Solstice { break; } case Narrowing::None: { - for (const auto& [key, value] : overloads) { - if ( - left.ptype.possiblities.find(key.left) != left.ptype.possiblities.end() && - right.ptype.possiblities.find(key.right) != right.ptype.possiblities.end() - ) { - node.ptype.possiblities.insert(value); + for (const auto& ltype : left.ptype.possiblities) { + for (const auto& rtype : right.ptype.possiblities) { + TypePair pair{ltype, rtype}; + if (overloads.find(pair) == overloads.end()) { + throw std::runtime_error("no valid overload compatible with previous statements"); + } + node.ptype.possiblities.insert(overloads[pair]); } } break;