C++ Logo

std-proposals

Advanced search

Re: Fwd: Re: "Union types" syntactic sugar

From: Sebastian Büttner <sebastian.buettner_at_[hidden]>
Date: Wed, 4 Mar 2020 18:22:22 +0100
It looks better with GCC trunk:

https://godbolt.org/z/pzxy9X

The status page mentions that concepts are available (modulo some NB
comment fixes) from GCC 10, so trunk seems like the minimum at the
moment: https://gcc.gnu.org/projects/cxx-status.html

Best regards,

Sebastian

On 04.03.20 18:18, Michał Piotr Gawron via Std-Proposals wrote:
> Thanks again. I actually tried the version with 'auto', but it didn't
> compile with gcc-9.2.1. Didn't try other compilers, but if it works,
> then I'll be happy. ;-)
>
> I now see that even
> void f (any_of<char, uint8_t> auto x);
> doesn't compile yet on my gcc.
>
> Maybe in future any_of (perhaps with a different name) could make its
> way to std::.
>
> std::best_regards();
>
> On 04.03.2020 18:09, Sebastian Büttner via Std-Proposals wrote:
>> Sure! You can do this (you were missing the "auto" of the
>> placeholder-type-specifier):
>> voidf(std::basic_string<any_of<char, uint8_t> auto> x);
>>
>> This works because "type-constraint auto" is a valid
>> placeholder-type-specifier (which is a simple-type-specifier) and those
>> are permitted as type-ids for a template type parameter (which is this
>> case):
>>
>> For completness: type-id <- type-specifier-seq <- type-specifier <-
>> simple-type-specifier <- placeholder-type-specifier <-
>> type-constraint_opt auto
>>
>> https://eel.is/c++draft/temp.arg.type#1
>> https://eel.is/c++draft/dcl.type#nt:type-specifier-seq
>> https://eel.is/c++draft/dcl.type#nt:type-specifier
>> https://eel.is/c++draft/dcl.type#nt:simple-type-specifier
>> https://eel.is/c++draft/dcl.type#nt:placeholder-type-specifier
>>
>> On 04.03.20 17:29, Michał Piotr Gawron via Std-Proposals wrote:
>>> On 04.03.2020 15:23, Sebastian Büttner via Std-Proposals wrote:
>>>> What's wrong with that (sorry for the terrible name):
>>>>
>>>> template<typenameT, typename... Us>
>>>> conceptany_of = (std::is_same_v<T, Us> || ...);
>>>>
>>>> voidf(any_of<char, uint8_t> autox);
>>>>
>>>> template<any_of<char, uint8_t> T>
>>>> voidf(std::basic_string<T> x);
>>> Ah, it looks like I could use this, it's quite readable to me. (I'm not
>>> very familiar with concepts yet.)
>>>
>>> Is there a way to have the std::basic_string<> version that would be
>>> more similar to this?
>>>
>>> void f (std::basic_string<any_of<char, uint8_t>> x);
>>>
>>> ?
>>>

Received on 2020-03-04 11:25:07