On 12/13/21 06:02, Jonathan Wakely wrote: > On Sun, 12 Dec 2021 at 05:39, Jason Merrill > wrote: > > > > In reading C++ diagnostics, it's often hard to find the name of the > function > > in the middle of the template header, return type, parameters, and > template > > arguments.  So let's colorize it, and maybe the template argument > bindings > > while we're at it. > > > > I've somewhat arbitrarily chosen bold green for the function name, and > > non-bold magenta for the template arguments.  I'm not at all attached to > > these choices. > > > > A side-effect is that when this happens in a quote (i.e. %qD), the > > rest of the quote after the function name is no longer bold.  I think > that's > > acceptable; returning to the bold would require maintaining a > colorize stack > > instead of the on/off controls we have now. > > > > Any thoughts? > > I thought I was going to love this ... and it's a nice little > improvement, but I didn't love it as much as I expected. > > Is it intentional that only the last function in the instantiation stack > gets colourized? In this example the function on line 390 isn't highlighted: > > /home/jwakely/gcc/12/include/c++/12.0.0/bits/ranges_base.h:390:12:  required > by substitution of 'template  requires > (is_bounded_array_v::type>) || > (__member_size*<_Tp>) || (__adl_size<_Tp>) || (__sentinel_size<_Tp>) > constexpr auto std::ranges::__cust_access::_Size::operator()(_Tp&&) > const [with _Tp = adl::Footie (&)[]]*' Oops, I needed to change subst_to_string as well. Updated patch below. > Aside: it's a little odd that the first caret diagnostic there only > highlights the word "operator" and not the name of the function, > "operator()". Yes, I imagine we need to adjust DECL_SOURCE_LOCATION to use a range instead of assuming the location of the first token is sufficient. Jason