[Issue 983] constant cfstrings for Darwin

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Sep 23 18:22:26 PDT 2007


http://d.puremagic.com/issues/show_bug.cgi?id=983


dvdfrdmn at users.sf.net changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED




------- Comment #7 from dvdfrdmn at users.sf.net  2007-09-23 20:22 -------
A inline function will not work because the non-inlined original will pass a
non-constant char* to __builtin___CFStringMakeConstantString (and fail to
compile).  Making CFString a void*...

    alias __builtin___CFStringMakeConstantString CFSTR;
    alias void * CFStringRef;

... is probably okay except that it becomes possible to this:

    CFString x = <pointer to something that is not a CFString....>

This is another possibility...

  static if ( is( typeof(__builtin___CFStringMakeConstantString) ret == return
) ) {
    alias ret CFStringRef;
    alias typeof(*CFStringRef) CFString;
    alias __builtin___CFStringMakeConstantString CFSTR;
  } else {
    struct CFString;
    alias CFString * CFStringRef;
  }

... but typeid(CFStringRef) could differ across object modules depending on the
compiler version, flags, etc.

We may just have to wait for AST macros to get the perfect solution.

(Closing the issue since CFStringMakeConstantString now works.)


-- 



More information about the D.gnu mailing list