On Tuesday, 14 August 2012 at 15:24:30 UTC, F i L wrote:
Really? We can catch (or, should be able to) missing initialization of stuff with @disable this(), but not floats?

Classes have constructors, which lend themselves perfectly to doing exactly this (just pretend the member is a local variable).

Perhaps there are problems with structs without disabled default constructors, but even those are trivially solvable by requiring a default value at declaration time.

You know, I never actually thought about it much, but I think you're right. I guess the same rules could apply to type fields.

Mmmm... What if you added a command that has a file/local scope? perhaps following the @disable this(), it could be @disable init; or @disable .init. This would only work for built-in types, and possibly structs with variables that aren't explicitly set with default values. It sorta already fits with what's there.

@disable init; //global scope in file, like @safe.

struct someCipher {
  @disable init; //local scope, in this case the whole struct.

int[][] tables; //now gives compile-time error unless @disable this() used.
  ubyte[] key = [1,2,3,4]; //explicitly defined as a default
  this(ubyte[] k, int[][] t){key=k;tables=t;}
}

void myfun() {
someCipher x; //compile time error since struct fails (But not at this line unless @disable this() used) someCipher y = someCipher([[1,2],[1,2]]); //should work as expected.
}

Reply via email to