I think
79 return a == shortcuts_.end() ? 0 : it->second;
must be
79 return it == shortcuts_.end() ? 0 : it->second;
because "a" and "shortcuts_.end()" are incompatible types.
"a" is the type of word_t,
but
"shortcuts_.end()" is the type of std::map<word_t, word_t*>::iterator.
each type is obviously different.