See PR50864.
This fixes error caused by substitution failures on template arguments
for concept specializations. With this patch, in such cases, the concept
specialization will evaluate to false instead.
As a bonus, we:
- Remove some memory leak as an std::string was being stored in the AST.
- Remove some duplicate implementation of serialization (as string) of substitution diagnostics for concepts.
- Fix some cases where we would try to take a SFINAE diagnostic without checking if there was one first.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>