"Jonathan M Davis" wrote in message
news:fxdqpmfcbskvtcafz...@forum.dlang.org...
LOL. Yeah, well, it would be ni going to support C+ce if we could get an
actual list of the C++ features that D currently supports somewhere (and
how to use them if it's not obvious). You've been doing so much great work
on that that I have no clue what the current state of things is. For
instance, this is the first I've heard of anything about template support;
I'd thought that we were never going to support templates. Is it just for
name mangling or for actually compiling them?
Templates are sort-of supported. The main motivation was to allow dmd's
Array<T> type to be used in function signatures. This is nice, because it
only requires correct name mangling, you don't need to worry about
instantiation.
Being able to call templated free functions and call methods on templated
types will require each referenced template to be explicitly instantiated on
the C++ side. I don't think it's realistic for D to do this automatically,
although it is possible to do things like generate a non-templated
forwarding wrapper function for each instantiation.
In DDMD, this is worked around by array.d containing a
functionally-equivalent translation of array.h. The D code all ends up
calling the D version, and the two must be kept exactly in sync. This
approach is probably feasible for accessing stl types and other common,
rarely changing C++ templates.
There are two reason it's not better documented:
1. I hate writing documentation. I really really hate it.
2. These features are rather difficult to use, and I don't want people to
think they can just plug-and-play. I've spent a lot of time fighting
compiler alignment bugs, which are their own special kind of hell. Many of
those issues have been resolved now, but only in the areas that ddmd
actually exercises.