Date: Wed, 31 Jul 2019 11:11:15 -0400
On Wed, Jul 31, 2019 at 10:19 AM Lyberta <lyberta_at_[hidden]> wrote:
> > The benefit is unsigned char already has char_traits support too.
>
> I'm looking at [char.traits.specializations] and don't see it.
>
It's not in the standard specifically, no, but no implementation is dumb
enough to ban it. If you have a strong over unsigned char, you can then
specialize char_traits for it by just doing
template <>
struct char_traits<u8char> : char_traits<unsigned char> {};
This requires that there's an implicit conversion from u8char -> unsigned
char, which I would imagine is safe enough unless you really care about
overload resolution. If overload resolution is a problem, I would suggest
either biting the bullet of a full implementation, or throwing out the
strong typedef altogether and just using "unsigned char" for your u8 type
anyhow.
Sincerely,
ThePhD
> > The benefit is unsigned char already has char_traits support too.
>
> I'm looking at [char.traits.specializations] and don't see it.
>
It's not in the standard specifically, no, but no implementation is dumb
enough to ban it. If you have a strong over unsigned char, you can then
specialize char_traits for it by just doing
template <>
struct char_traits<u8char> : char_traits<unsigned char> {};
This requires that there's an implicit conversion from u8char -> unsigned
char, which I would imagine is safe enough unless you really care about
overload resolution. If overload resolution is a problem, I would suggest
either biting the bullet of a full implementation, or throwing out the
strong typedef altogether and just using "unsigned char" for your u8 type
anyhow.
Sincerely,
ThePhD
Received on 2019-07-31 17:11:29