#include <vector>

template<typename T> struct is_vector : public std::false_type {};

template<typename T, typename A>
struct is_vector<std::vector<T, A>> : public std::true_type {};

template <typename T> class X
{
  public:
   T container;

   void foo()
   {
      if(is_vector<T>::value)
         container.push_back(0);
      else
         container.insert(0);
   }
};

// somewhere else...
int main()
{
   X<std::vector<int>> abc;
   abc.foo();
}