Using typedefed types as covariant return types
Stewart Gordon
smjg at iname.com
Thu Feb 8 05:09:00 PST 2007
Bill Baxter Wrote:
> Rick Mann wrote:
>> I didn't get any responses in D.learn for this question, so I
>> decided maybe it was advanced enough for this group.
>>
>> I was hoping I could do this:
>>
>> typedef void* CFTypeRef;
>> typedef CFTypeRef CFStringRef;
<snip>
>> From what I gather in the docs, CFStringRef is derived from
>> CFTypeRef, so this should be acceptable. Am I missing something?
>
> That's not the message I get from reading the docs. What I see:
> "Strong types are semantically a distinct type to the type checking
> system, for function overloading, and for the debugger."
> (http://www.digitalmars.com/d/declaration.html)
Are you taking this to mean distinct from each other or distinct from their underlying types? If the latter, this is much the same a class being different from its base class.
> Basically CFStringRef becomes something completely new and
> different from CTypeRef as far as the compiler is concerned.
What are you reading that makes you think it's _completely_ different? This compiles:
----------
typedef void* CFTypeRef;
typedef CFTypeRef CFStringRef;
void func(CFTypeRef p) {}
void main() {
CFStringRef s;
func(s);
}
----------
> What are you reading that makes you think CFStringRef is "derived"
> from CFTypeRef?
Probably that typedefs implicitly convert to their underlying types. Moreover, typedefs behave in a number of respects very similarly to enums, for which the notation
enum Enum : int
suggests type derivation as with classes.
Stewart.
More information about the Digitalmars-d
mailing list