1. The problem statement is well-defined and C++ is the language that cares about these details (compared to, e.g., Java or even Rust). 2. The author correctly identifies a feature in the language that solves the same (or a very similar) problem in a different context with a very hard-to read mechanism invoking special rules. 3. The author proposes additional syntax (essentially necessary for backwards compatibility) that allows to apply the existing mechanism in a new context. 4. The author proposes a new (set of) rule(s) that gives meaning to the new syntax using the existing mechanism.
In sum we have:
* 1 piece of new syntax
* 1 new semantic rule
* offloaded a limited problem to a the ever more complex template instantiation machinery
* less code in implementations, more in headers
Note that the original use case was about how the this argument is passed to methods. But it became a very powerful language extension. (See section 4.2.2) This reduces usability. Imagine a developer calls a method with the wrong const qualifier, yielding an (unexpectedly) const-qualified return type. Currently, there will be a short and helpful error message. With this proposal, this error message will be buried in the template instantiation details.
The problem is that template instantiations have become so generic that you essentially program the compiler with them. But how to generate meaningful error messages remains a mystery. Presumably this will be left to the library authors then.