RFE: -fconcepts support for libstdc++

Avi Kivity avi@scylladb.com
Thu Jan 11 13:22:00 GMT 2018



On 01/11/2018 01:19 PM, Jonathan Wakely wrote:
> On 11 January 2018 at 11:02, Avi Kivity wrote:
>> C++ error messages are notoriously cryptic, but it's much worse when it
>> comes from someone else code.
>>
>>
>> In our code, we have a GCC6_CONCEPT(x) macro that wraps concept declarations
>> and is defined as x when -fconcepts is enabled. It would be wonderful if
>> something similar could be done to libstdc++ when -fconcepts is enabled.
>>
>>
>> Now, the concept implementation in gcc may not match the draft standard
>> exactly, but gcc and libstdc++ are developed in lockstep so when the
>> compiler changes the library can change with it. We won't be able to rely on
>> concepts for disambiguating between overloads, but they'll work well for
>> improving the quality of diagnostics.
> [N.B. This is probably better on the libstdc++ list, redirecting there]
>
> I know Ville has experimented with using concepts for std::tuple,
> because the SFINAE tricks needed there are frankly ludicrous.
>
> But I think he did it to simplify the implementation, not for better
> diagnostics, and of course you only simplify the implementation if you
> replace the old code, not if you duplicate it and have two different
> versions.

I don't think you can replace the code, because you can't require people 
to use -fconcepts for C++17 and below. It can only be an optional 
system, and therefore only useful for diagnostics.

>
> Have you found that you really do get better diagnostics when using
> concepts?

Yes. It's not earth-shattering, but it's a lot nicer to get an error at 
the point of entry into template hell, rather than 5 or 15 
instantiations down the stack. libstdc++'s implementation style with 
template base classes or members, often using EBO hacks, makes the 
payoff greater.

>   Unless we really do get significantly improved diagnostics I
> don't think the cost of maintaining two versions of complex,
> error-prone code is worth it. There's a risk of divergence in
> semantics, and it's simply harder to maintain twice as much code.
>
> But I'd certainly consider patches in this area, as long as they come
> with analysis of the error modes, the resulting diagnostics, and don't
> cause too much of a maintenance burden. As a community we do need to
> start considering how best to apply concepts in existing code,
> including the std::lib.

Perhaps we can start with std::variant, which has no old-style concepts 
check implementation (and which was the object of a complaint that 
triggered this email).



More information about the Libstdc++ mailing list