I think it is common C++ practice to place class template declarations and definitions in separate files, and the definition file is usually named *.ipp or *.tcc or similar. Since the definitions are always needed by the compiler along with the declarations, the *.ipp files are included from the header (*.h) files. When editing a *.ipp file in vim, though, YCM has no way to know that it should start parsing with the header file, so it detects many compilation errors. The filetype is "cpp", just like any other C++ file, so I don't think that can be used to distinguish between them. Has anyone else dealt with this problem?