I haven't tried or checked but from what I remember it behaves this way: 1. If you invoke it on a use of symbol (not its definition/declaration, in your case it would be some call of `handle()` in the code), it will jump to its definition. 2. If you invoke in on a definition of a symbol (in your case on the line with `handle` function definition in your cpp), it jumps to its declaration in hpp. 3. If you invoke in on a declaration of a symbol (in your case on the line with `handle` function declaration in your hpp), it jumps to its definition in cpp.
The logic is about this - (1) takes you to the definition which is probably what you want, by (2)/(3) you can quickly toggle between definition/declaration.
If there are multiple symbols found, it does the same, it just pops up a list with either definitions or declarations, depending on where you invoked it based on the 3 cases above. So I guess in your example you invoked it on the `handle` ``` Err::Severity CLI::Option_string::handle(string_view o, string_view v, size_t, const string&){ ``` in your cpp file so you got just the declarations.
(Or there's really some bug of course :-)