Forbid the use of method name "init"

Bruno Medeiros brunodomedeiros+spam at com.gmail
Tue May 27 15:34:23 PDT 2008


davidl at 126.com wrote:
> ÔÚ Sun, 11 May 2008 05:46:57 +0800£¬Jarrett Billingsley 
> <kb3ctd2 at yahoo.com> дµÀ:
> 
>> "Frank Benoit" <keinfarbton at googlemail.com> wrote in message
>> news:g052dt$qt4$1 at digitalmars.com...
>>> "init" and other class properties are kind of shadow-keywords.
>>>
>>> class MyClass{
>>>   void init(){
>>>   }
>>> }
>>>
>>> The class is fine and can be used.
>>> Now someone attempts to insert this class into a container....
>>>
>>> template Templ(T){
>>>   T t = T.init; // Compile error
>>> }
>>>
>>> The compiler should forbid the use of the method name "init", if the
>>> signature does not make any sense for an "init" property. It must be a
>>> static method, with a return value and no arguments.
>>
>> This should extend to any semi-reserved name.  The compiler used to allow
>> redefinition of 'sizeof' and 'offsetof' but checks were added to disallow
>> that.  That mechanism should just be extended.
>>
>>
> 
> I filed a bug of forbiding the use of stringof method. But it's markd as 
> invalid :(
> http://d.puremagic.com/issues/show_bug.cgi?id=1412
> 

I've added my reasoning to that bug report. I guess one could make a 
case for redefining 'init', but as for 'stringof', it should be the same 
as 'sizeof' and 'offsetof': unextendable, like Jarret mentioned.

-- 
Bruno Medeiros - Software Developer, MSc. in CS/E graduate
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D



More information about the Digitalmars-d mailing list