================
@@ -9304,7 +9299,8 @@ TemplateName 
ASTContext::getAssumedTemplateName(DeclarationName Name) const {
 TemplateName ASTContext::getQualifiedTemplateName(NestedNameSpecifier *NNS,
                                                   bool TemplateKeyword,
                                                   TemplateName Template) const 
{
-  assert(NNS && "Missing nested-name-specifier in qualified template name");
----------------
ilya-biryukov wrote:

Makes total sense, this change to the contract of the class seems very 
reasonable.
I have also went through all usages and we don't see to have any uses left that 
don't check for null in return of `getQualifier`.

Could we update the documentation of the class? It currently says (see below) 
that the name must always be qualified, mentioning that it may also be 
qualified only with `template` keyword without the nested name specifier.

```cpp
/// Represents a template name that was expressed as a
/// qualified name.
///
/// This kind of template name refers to a template name that was
/// preceded by a nested name specifier, e.g., \c std::vector. Here,
/// the nested name specifier is "std::" and the template name is the
/// declaration for "vector". The QualifiedTemplateName class is only
/// used to provide "sugar" for template names that were expressed
/// with a qualified name, and has no semantic meaning. In this
/// manner, it is to TemplateName what ElaboratedType is to Type,
/// providing extra syntactic sugar for downstream clients.
```

https://github.com/llvm/llvm-project/pull/93433
_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to