"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.

"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.

"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 =3D 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 al=

low

redefinition of 'sizeof' and 'offsetof' but checks were added to disal=

"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'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