[cfe-commits] r68128 - in /cfe/trunk: include/clang/AST/TemplateName.h include/clang/Basic/DiagnosticSemaKinds.td lib/AST/TemplateName.cpp lib/Sema/Sema.h lib/Sema/SemaTemplateInstantiate.cpp test/SemaTemplate/instantiate-template-template-parm.cpp test/SemaTemplate/metafun-apply.cpp
Chris Lattner
clattner at apple.com
Tue Mar 31 12:43:23 PDT 2009
On Mar 31, 2009, at 11:38 AM, Douglas Gregor wrote:
> URL: http://llvm.org/viewvc/llvm-project?rev=68128&view=rev
> Log:
> Implement template instantiation for template names, including both
> template template parameters and dependent template names. For
> example, the oft-mentioned
>
> typename MetaFun::template apply<T1, T2>::type
>
> can now be instantiated, with the appropriate name lookup for "apply".
Nice! Some nits:
> +++ cfe/trunk/include/clang/AST/TemplateName.h Tue Mar 31 13:38:02
> 2009
> @@ -99,6 +99,10 @@
> /// \brief Print the template name.
> void Print(llvm::raw_ostream &OS) const;
>
> + /// \brief Debugging aid that dumps the template name to standard
> + /// error.
> + void Dump() const;
Most of the other dump/print methods are lower case. Should these be
lower case also?
>
> +++ cfe/trunk/lib/AST/TemplateName.cpp Tue Mar 31 13:38:02 2009
> @@ -14,6 +14,7 @@
> #include "clang/AST/DeclTemplate.h"
> #include "clang/AST/NestedNameSpecifier.h"
> #include "llvm/Support/raw_ostream.h"
> +#include <stdio.h>
<cstdio>?
> +void TemplateName::Dump() const {
> + std::string Result;
> + {
> + llvm::raw_string_ostream OS(Result);
> + Print(OS);
> + }
> + fprintf(stderr, "%s", Result.c_str());
> +}
Please just use Print(llvm::errs()), which eliminates the need for
<stdio>
> +TemplateName
> +Sema::InstantiateTemplateName(TemplateName Name, SourceLocation Loc,
> + const TemplateArgument *TemplateArgs,
> + unsigned NumTemplateArgs) {
> + if (TemplateTemplateParmDecl *TTP
> + = dyn_cast_or_null<TemplateTemplateParmDecl>(
> +
> Name.getAsTemplateDecl())) {
> + assert(TTP->getDepth() == 0 &&
> + "Cannot reduce depth of a template template parameter");
> + assert(TTP->getPosition() < NumTemplateArgs && "Wrong # of
> template args");
> + assert(dyn_cast_or_null<ClassTemplateDecl>(
Maybe Casting.h should grow an isa_or_null?
-Chris
More information about the cfe-commits
mailing list