Templates class member functions not conditional?

monarch_dodra monarchdodra at gmail.com
Tue Sep 11 11:39:55 PDT 2012


On Tuesday, 11 September 2012 at 17:52:44 UTC, Jonathan M Davis 
wrote:
> On Tuesday, September 11, 2012 19:37:02 monarch_dodra wrote:
>> However, when written like this:
>> 
>> struct C(T)
>> {
>>       private T val;
>> 
>>       // Gets front
>>       @property T front()
>>       {val = value;}
>> 
>>       //Writes to front
>>       static if(isAssignable!(T,T))
>>       @property void front(T value)
>>       {val = value;}
>> }
>> 
>> Then I think it reads alright.
>
> Whereas I think that that hards readibility, because it hides 
> the fact that a
> static if is used. If you're submitting code for Phobos, please 
> do something
> like
>
> static if(isAssignable!(T, T)) @property void front(T value) 
> {val = value;}
>
> or
>
> static if(isAssignable!(T,T))
>     @property void front(T value) { value = value; }
>
> rather than what you have above, otherwise it will harm 
> maintainability.
>
> - Jonathan M Davis

Hum... Yeah, you are kind of right.

I actually am committing something, but the code is a 2 liner. 
(enforce, then assignment).

Is one of these what you are suggesting?

//One
static if(isAssignable!(T,T)) @property void front(T value)
{
     enforce(someCondition)
     value = value;
}

or

//Two
static if(isAssignable!(T,T))
     @property void front(T value)
{
     enforce(someCondition)
     value = value;
}

or

//Three
static if(isAssignable!(T,T))
@property void front(T value)
{
     enforce(someCondition)
     value = value;
}


(or just plain)

//Four
static if(isAssignable!(T,T))
{
     @property void front(T value)
     {
         enforce(someCondition)
         value = value;
     }
}

Which do YOU think reads best in this case? That the style I'll 
use in my submit.

I like //Three because it reads like an attribute.

Of course, I have no problem submitting it with the default 
//Four if you think that is best. I'm just trying to do as best 
possible.


More information about the Digitalmars-d-learn mailing list