I started looking at allowing non-type constrained-type-specifiers in auto deduction and then realized that we didn't handle them in function parameters either. Fixing that brought home to me the oddity of having a type-specifier stand in for a non-type. Mind weighing in on that on the core reflector? I also wonder why we have two different ways of expressing a constrained-type-specifier in the implementation: a constrained template-parameter (TYPE_DECL, is_constrained_parameter) and a constrained auto (TEMPLATE_TYPE_PARM). Why not represent them the same way? This patch doesn't mess with this duality, but extends equivalent_placeholder_constraints to deal with both kinds, and then uses that for comparing constrained-type-specifiers. And also handles non-type constrained-type-specifiers in abbreviated function templates. Tested x86_64-pc-linux-gnu, applying to trunk.