NOTE: ycm does not work well for template class in its generic form, e.g. std::vector<T> vec