[cfe-dev] How to perform template substitution in the clang library
John McCall
rjmccall at apple.com
Sun Dec 2 23:58:00 PST 2012
On Dec 2, 2012, at 5:40 AM, stewart mackenzie <setori88 at gmail.com> wrote:
> Further to the question:
>
> Kenny said:
>
> I've got a partial solution, the only caveat is that, I can't get
> std::is_same<N<4>, N<4>>::value to return true. Well I can live with
> that, as I could just define a constexpr method which operates on the
> values directly. But I hope someone could provide a correct answer for
> this.
>
> I have put the complete solution and the modified input to
> https://gist.github.com/4178490.
>
> I've found that to substitute arguments into a class template and
> instantiate it, one would:
>
> Use the arguments to turn the ClassTemplateDecl into
> ClassTemplateSpecializationDecl, and
> Instantiate the specialization using Sema::InstantiateClass method.
You definitely don't want to call InstantiateClass directly;
RequireCompleteType is better. More generally, you want to
use the Sema functions to create the type you're interested in.
For a template alias, that will automatically perform the substitution,
because template aliases are not lazily substituted.
For function templates, I would suggest faking up an explicit
instantiation declaration.
John.
More information about the cfe-dev
mailing list