Using typedefed types as covariant return types

Bill Baxter dnewsgroup at billbaxter.com
Wed Feb 7 16:05:15 PST 2007


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;
> 
> class DCFObject
> {
>   CFTypeRef getRef() {}
> }
> 
> class DString : DCFObject
> {
>   CFStringRef getRef() {}
> }
> 
> But the compiler gives me:
> 
> src/d/darbon/corefoundation/DString.d:32: function darbon.corefoundation.DString.DString.getRef of type CFStringRef() overrides but is not covariant with darbon.corefoundation.DCFObject.DCFObject.getRef of type CFTypeRef()
> 
> 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)

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 CFStringRef is "derived" from 
CFTypeRef?

--bb



More information about the Digitalmars-d mailing list