http://d.puremagic.com/issues/show_bug.cgi?id=5110



--- Comment #2 from Shin Fujishiro <rsi...@gmail.com> 2010-10-24 02:09:16 PDT 
---
Created an attachment (id=792)
Testcases

Since nothrow, pure and @disable are one-way, non-revertible attributes, the
language should not force them to be propagated IMO.  So, structs and classes
should really propagate only the following STCs:

  STCimmutable, STCconst, STCshared, STCsynchronized,
  STCsafe, STCtrusted, STCsystem.

Note that the first four STCs must not be applied to static members, including
nested types:
--------------------
const synchronized class C
{
    static int value;   // NO const
    enum E { a, b, c }  // NO const
    class N {}          // NO const synchronized
}
--------------------

The nested class N itself isn't necessarily const nor synchronized, since its
declaration is effectively the same as the following one.  Whether N should be
const/synchronized or not is independent of C.
--------------------
class N
{
    C outer;    // C is already const synchronized
}
--------------------

To sum up, the rule allows these attribute propagations:

 - const, shared, immutable and synchronized over non-static members
 - @safe, @trusted and @system over all members

Attached test cases.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------

Reply via email to