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.