On Tuesday, 11 September 2012 at 15:43:56 UTC, Jonathan M Davis wrote:

Anything inside a template is not compiled unless the template is instantiated, but if the template is instantiated, the entire template is instantiated and compiled (save for static if branches which aren't followed or inner templates which aren't instantiated). If C++ doesn't work that way as well, I find that to be very bizarre. Regardless though, that's how D works.

- Jonathan M Davis

TY for putting up with me :D

C++ works a certain way, and I find it very bizarre that D doesn't work that way either. Then again, C++ doesn't have static if.



At the very least, I wish we could write:
--------
struct S(T)
{
    @property void front(T value)
        if(isAssignable!(T,T))
    {
        ...
    }
}
--------
That would make things less bulky and the intent much more streamlined with what we already have.

In this specific case, this doesn't work because "front" itself isn't a template, but given the encapsulating struct *is* a template, I think it should be made to work.

As a matter of fact, I don't see why we can't use conditional implementations ALL the time? Like: If some enum is defined, or if a certain type works or whatever.

Reply via email to