They're issues when using the read macron in this function. Possible infinite loop due to read() not incrementing pos.
Token Scanner::ScanString () {
stringstream accum;
char opening_char = Read (pos, source);
while (CanAdvance (pos, 1, source)) {
char current = Peek (pos, 1, source);
if (current == opening_char) {
++pos;
break;
} else if (current == '\\') {
accum << Read (pos, source);
accum << Read (pos, source);
} else
accum << Read (pos, source);
}
cout << "String: " << accum.str () << endl;
return Token (TokenType::String, accum.str ());
}```