As I’ve read and seen in Clang’s code, a Concepts implementation in Clang hasn’t really been pushed forward in the past year, with only very, very little code in place right now regarding Concepts, placed by Hubert Tong, CC’d, back in February, and very little to non-existent discussions in the mailing lists.
As of the Toronto meeting back in July, a subset of the original Concepts TS was merged into draft C++20, which omits some shorthand notations for concepts but keeps the core parts of the language feature. Most notably - function concepts were removed, as well as the ‘bool’ keyword after the ‘concept’ keyword, and the ‘introducer’ and “terse/natural syntax” were omitted.
I believe we should go ahead and implement P0734R0 now for the following reasons:
- P0734R0 hasn’t yet been implemented in any compiler (excluding GCC which implements a different proposal), and furthermore no Concepts implementation was made from specification - Andrew Sutton who worked on the GCC implementation also wrote the proposal. Doing a concepts implementation now would, I believe, help the committee discover defects and in general be more confident in the proposal.
- to be honest, it is really not that hard to implement, and can, I believe, be done in a month or two.
- Concepts will be present in C++2a unless something extraordinary happens - if not in their current form, then in a very similar form with maybe a few more terse syntaxes introduced which would not break existing code but just allow for nicer code - in any case, I believe it is a good time to lay a foundation for the core of the language feature which seems pretty stable already and were agreed upon by the committee.
I took a look at the relevant code and the proposal and hereby propose a roadmap for implementing Concepts in clang as it stands today: https://github.com/saarraz/clang-concepts-roadmap
I broke it up into commit-sized chunks, which should take us to a working implementation of the proposal. I’m of course willing to implement all of this if needed.
Please tell me what you think and post issues/pull requests to the roadmap repo or post here.
I’d really like to see this get going.