ptr_vector hasn't been updated for C++11, so despite being specifically designed to store pointers to objects it's less safe and not really any easier to use than a regular vector of unique_ptrs
Apparently gcc does use final for devirtualization.