I thought the only difference between std::unordered_map::operator[] and std::unordered_map::at is that std::unordered_map::at throws std::out_of_range if the key doesn't exist.
However, in the following code snippet, std::unordered_map::at works but std::unordered_map::operator[] gives a compiler error
const unordered_map<char, string> digit2Letters {
{'2', "abc"},
{'3', "def"},
{'4', "ghi"},
};
digit2Letters.at('1') // works good
digit2Letters['1']; // compiler error: no operator "[]" matches these operands
Does anyone know why std::unordered_map::at works but std::unordered_map::operator[] fails?