Concepts status

What is the status of adding support for Concepts in Clang? Is there any kind of roadmap for this?

Thanks,
Andrew.

Hi Andrew,

Concepts support is still ongoing in Clang. There is no published roadmap, but the goal is to have a full implementation (at least using the requires-clause syntax) in Spring of 2017.

– HT

Thanks Hubert.

Is there a public branch available? I’d be interested in getting involved.

Hi Andrew,

There isn’t a branch devoted to Concepts; patches are created and merged into trunk (master). If you look through the logs you’ll see some commits with [Concepts] or [CONCEPTS] in the subject.

Currently there is a front end only (cc1 only)
-fconcepts-ts flag which may be specified with -Xclang -fconcepts-ts as well.

Thanks,
Nathan

Thanks Hubert.

Is there a public branch available? I’d be interested in getting involved.

Hi Andrew,

I have an idea of the dependencies behind the various part of the work and could hopefully help coordinate the implementation effort.
Brain dump follows; please let me know what part of the implementation you are interested in. Note that Nathan may already have plans to work on certain things.

The implementation is still in its early stages. As Nathan mentioned, it is currently controlled by a cc1 flag -fconcepts-ts.

Broadly, there are various sides to the “core concepts” implementation.
One is allowing for constrained templates. Another is allowing for concept definitions. A third is requires-expressions.

Nathan Wilson has been implementing concept definitions.
The acceptance of “concept” as a specifier for that purpose has been implemented, as have various diagnostics associated with its use.
The last I know of, Nathan noted that there are still a few things that need to be completed on that front (such as 7.1.7 p3). The tests are under the tests/CXX/concepts.ts directory.

The presence of concept definitions lends itself to adding an implementation of constrained-parameters (at least the parsing is safe to do for now–see below for the state of representing constrained templates). I’m not a fan of template-introducers, but those are also in a similar state.

I suggest avoiding abbreviated function template syntax for now.

Since require-expressions are allowed in limited contexts, and a concept definition is one of them, it is also a great time to start work on requires-expressions.
I believe Nathan is planning to work on this.

For constrained templates, the idea is to first allow for requires-clauses in template-declarations.
The parsing for that is complete.

We still need to attach the parsed constraint-expression to the declaration.
I submitted patches to add a field to TemplateParameterList to allow the constraint-expression to flow from the Parser to the point where we create the declaration.
My next step is to attach constraints to declarations properly.

At this stage, the associated constraint (which is used for matching declarations) for the template would still be the same as the constraint-expression; however, as additional forms of constraining templates is added, this will change (and so different declarations of the same templated entity may syntactically have their constraints expressed differently). The canonical representation of the associated constraint is that specified by the TS (a single expression).

When we have the canonical representation attached to a declaration of the template, we can move forward with several things immediately.

The resolution of declarations to prior declarations will need to be done (which will involve comparison of template-dependent expressions)–this is the part I’m working towards.

Implementing mangling for the associated constraints is another.

Determining whether the associated constraint is satisfied is yet another.
This will involve normalizing the constraint into a form which, in terms of the implementation, will be conducive to doing the as-needed template argument substitution.
Once this is implemented, then triggering substitution failure when appropriate could be considered “cutting the ribbon”.

There is more to do for the partial ordering and subsumption determination. Those work upon the normalized constraint. A theorem prover would be useful.

– Hubert Tong

Thanks Hubert,

Let me first get to grips with working on the Clang source and familiarise myself with current Concepts spec then I’ll see where I can contribute most usefully.

Cheers,
Andrew.