Why can't structs be derived from?
Simen kjaeraas
simen.kjaras at gmail.com
Fri Mar 18 14:13:42 PDT 2011
On Fri, 18 Mar 2011 15:09:23 +0100, Nick Sabalausky <a at a.a> wrote:
> "Bekenn" <leaveme at alone.com> wrote in message
> news:ilv2pd$1vkd$1 at digitalmars.com...
>> On 3/17/2011 2:36 PM, Andrei Alexandrescu wrote:
>>>
>>> I'm with y'all too. Even Walter needs to stop and think for a second.
>>> We're considering enabling
>>>
>>> alias a = b;
>>>
>>> as an equivalent for
>>>
>>> alias b a;
>>>
>>
>> Along similar lines (hoping this isn't too far off-topic), what's the
>> current plan for typedef? I'm aware that it's deprecated (and for good
>> reason), but some of my reading suggests that there's a successor on the
>> horizon.
>
> I was thinking of asking about that, too. Specifically, would it make
> sence
> for "typedef b a;" (or "typedef a = b;") to be lowered to something like:
>
> struct a
> {
> b _tmp;
> alias _tmp this;
> }
>
> Hmm, then again, IIUC, that would allow 'a' to be implicity converted to
> 'b'
> which would defeat half the point, so maybe not.
Yeah. Typedef is too blunt an instrument for our purposes. What we want is:
alias Subtype!int SubInt;
alias Supertype!int SupInt;
alias Standalone!int NaturalNumber;
Where the following work:
int a = SubInt(3);
SupInt b = 3;
NaturalNumber c = NaturalNumber(3);
and the following do not:
SubInt d = 3;
int e = SupInt(3);
NaturalNumber f = 3;
int g = NaturalNumber(3);
And of course:
alias Subtype!int SubInt2;
alias Supertype!int SupInt2;
alias Standalone!int NaturalNumber2;
Where these do not work:
SubInt2 h = SubInt(3);
SupInt2 i = SupInt(3);
NaturalNumber2 j = NaturalNumber(3);
--
Simen
More information about the Digitalmars-d
mailing list