On 01/25/2011 10:45 AM, Jens Mueller wrote:
I distinguish the following:
type qualifiers: const, immutable, maybe also inout
function attributes: pure, nothrow
storage class: ref, in, out, static
access qualifiers: private, package, protected, public, export

Nice & clear classification. Then, if you allow replacing "attribute" and "class" by "qualifier" (which by the way both are somewhat confusing because of other common meanings), you get a super-class of qualifiers. All are put aside a name which can denote a plain var, a type etc... Only in case of function they can be prefixed to the whole signature, which creates ambiguity with the return type:
        const int square (int x) {...}  // func or return type?

The obvious consistent choice, imo, would be to place them aside the function 
name:
        int const square (int x) {...}
        const int square (int x) {...}
        const int const square (int x) {...}
but indeed would be a syntactic revolution ;-)

Another solution would be to enforce parentheses except in the case of function:
        const int square (int x) {...}  // func
        const(int) square (int x) {...} // return type

Denis
--
_________________
vita es estrany
spir.wikidot.com

Reply via email to