I started trying to fix issue #1013, but found it rather difficult to change the current parser. This pull-request is therefore a rewrite of most of the C++ domain such that the parser follows the overall structure of the C++ grammar. This should make it easier to add new features.
Most notable changes:
Hyperlinks to all found nested names and template arguments (also fixes #1103).
Support for function types everywhere, e.g., in std::function<bool(int, int)> (#1013).
Support for virtual functions.
Changed interpretation of function arguments to following standard prototype declarations, i.e., void f(arg) means that arg is the type of the argument, instead of it being the name.
Updated documentation with elaborate description of what declarations are supported and how the namespace declarations influence declaration and cross-reference lookup.
Index names may be different now. Elements are indexed by their fully qualified name. It should be rather easy to change this behaviour and potentially index by namespaces/classes as well.