That is rather obvious.
The type of first_prop is some_obj<short>* and therefore
the first_prop->update(value) is calling the member function update(short) of
object that has type some_obj<short>.
Your some_obj template has no member update(). It does have updateValue() though ...
However, why the pointers? You already have the map.
Why the map? There is no dynamic mapping; the code so far is quite static.