What are the worst parts of D?

Kagamin via Digitalmars-d digitalmars-d at puremagic.com
Wed Sep 24 06:06:52 PDT 2014


On Wednesday, 24 September 2014 at 00:08:19 UTC, H. S. Teoh via 
Digitalmars-d wrote:
> You *will* need SFINAE if you expect to interface C++ template 
> libraries
> with D. Imagine that an existing codebase is using some C++ 
> template
> library that depends on SFINAE. You'd like to start migrating 
> to D, so
> you start writing new code in D. Eventually you need to make 
> use of the
> C++ template library in order to interface with the C++ parts 
> of the
> code, so you write a .di that declares template functions in an
> extern(c++) block. It works...  some of the time. Other times 
> you start
> getting weird errors or the wrong functions get called, because 
> the C++
> template library was written with SFINAE in mind, but D doesn't 
> have
> that. So at the end of the day, it's a gigantic mess, and you go
> crawling back to C++.
>
> Unless, of course, we draw the line at templates and say that 
> we won't
> support template compatibility with C++ (and I'd fully support 
> that
> decision!). But that means we throw all C++ template libraries 
> out the
> window, and any C++ codebase that makes heavy use of a template 
> library
> will have to be rewritten from scratch in D.

I'm not a C++ guru, but it looks like SFINAE exists for 
simplicity, so that templates can be matched without template 
constraints and reflection. This looks equivalent to D template 
constraints. If template doesn't work for some parameters, just 
filter them out.


More information about the Digitalmars-d mailing list