On Monday, March 12, 2012 09:14:17 Martin Nowak wrote: > > So I propose instead a bit of a hack. toHash, opEquals, and opCmp as > > struct members be automatically annotated with pure, nothrow, and @safe > > (if not already marked as @trusted). > > How about complete inference instead of a hack?
Because that requires having all of the source code. The fact that we have .di files prevents that. You'd have to be able to guarantee that you can always see the whole source (including the source of anything that the functions call) in order for attribute inferrence to work. The only reason that we can do it with templates is because we _do_ always have their source, and the fact that non- templated functions must have the attributes in their signatures makes it so that the templated functions don't need their source in order to determine their own attributes. The fact that we can't guarantee that all of the source is available when compiling a particular module seriously hampers any attempts at general attribute inference. - Jonathan M Davis