augroup fswitch
     au!
-    au BufEnter *.h   let b:fswitchdst  = 'c,cpp'
-    au BufEnter *.h   let b:fswitchlocs = '.,reg:|include.*|src|'
-    au BufEnter *.c let b:fswitchdst  = 'h'
-    au BufEnter *.c let b:fswitchlocs = 'reg:|source|include/**|'
-    au BufEnter *.hpp let b:fswitchdst  = 'cpp,c'
-    au BufEnter *.hpp let b:fswitchlocs = 'reg:|include.*|src|'
-    au BufEnter *.cpp let b:fswitchdst  = 'hpp,h'
-    au BufEnter *.cpp let b:fswitchlocs = 'reg:|src|include/**|'
+    au BufEnter *.h        let b:fswitchdst  = 'c,cpp,cxx'
+    au BufEnter *.h        let b:fswitchlocs = '.,reg:|include.*|src|'
+    au BufEnter *.c        let b:fswitchdst  = 'h'
+    au BufEnter *.c        let b:fswitchlocs = 'reg:|source|include/**|'
+    au BufEnter *.hpp      let b:fswitchdst  = 'cpp,cxx,c'
+    au BufEnter *.hpp      let b:fswitchlocs = 'reg:|include.*|src|'
+    au BufEnter *.c(pp|xx) let b:fswitchdst  = 'hpp,h'
+    au BufEnter *.c(pp|xx) let b:fswitchlocs = 'reg:|src|include/**|'
 augroup END
 
 nnoremap <buffer> gd :YcmCompleter GoTo<CR>