If GTAGSFORCECPP is defined and --explain is used and a .h file is first, gtags will crash. This is because lastmatch is not set due to match_suffix_list being bypassed (and so if .h is not first it will show the suffix of the previous file).
The language is set to "cpp", but only the built-in parser uses that, other parsers use "C++". This means forcing C++ will use the built-in parser for .h files, not the desired parser. Since only the built-in parser uses .h as C the simple solution is to not force C++ if you're using another parser. -- Jason.