Refactoring observer pattern interface
Looks good.

This is a little confusing:

void attachObserver(vector_type::value_type observer)


To see what I have to pass to this function. I need to look up vector_type (which is in the class). I would make it more explicit so that I can see exactly what is expected:

void attachObserver(std::unique_ptr&lt;Oberver&gt; observer)


Don't see the need for:

class FooSubject : public Subject


I would just put all methods in Subject (no need for a FoodSubject). But this is a pattern not a design and you may have a reason that are not obvious from the current question.

There is no need to define methods that are covered by the default versions.

// I would not bother with this
FooSubject() {}
~FooSubject() {}