The basic idea is to walk through the concept definition, looking for
t.foo() where t has the constrained type.
In this patch:
- nested types are recognized and offered after ::
- variable/function members are recognized and offered after the correct dot/arrow/colon trigger
- member functions are recognized (anything directly called). parameter types are presumed to be the argument types. parameters are unnamed.
- result types are available when a requirement has a type constraint. These are printed as constraints, except same_as<T> which prints as T.
Not in this patch:
- support for merging/overloading when two locations describe the same member. The last one wins, for any given name. This is probably important...
- support for nested template members (T::x<int>)
- support for completing members of (instantiations of) template template parameters
also mark the member as const ?