Ironclad C++
Kagamin
spam at here.lot
Tue Aug 6 08:13:16 PDT 2013
On Tuesday, 6 August 2013 at 02:11:54 UTC, Timon Gehr wrote:
> I thought I had demonstrated that it buys you more. It resolves
> the problem that scoping is ambiguous and that there can be
> only one 'inout' substitution per function application.
It may look ambiguous to someone who doesn't know, how the
feature works, because it's implicit, which, again, is a
tradeoff. Subjective ambiguity should be solvable with better
docs, learning resources and tutorials.
> Why? It is the same kind of problem.
They differ in scale. Const overloads are an overwhelming problem
in OO design, which is vaguely demonstrated in DIP2.
> Of course. Just push the parameter to the instantiated struct
> type.
>
> i.e.
>
> struct S(T){
> T field;
> }
>
> S!(C(int)*) foo[TC C](C(int)* p){ return typeof(return)(p); }
>
>
> Would behave like:
>
> struct S[TC C]{ // (template instance)
> C(int)* field;
> }
>
> S![C] foo[TC C](C(int)* p){ return typeof(return)(p); }
Ah, an opaque template parameter? It may have value in itself and
not require a new syntax or restricted to type qualifiers.
> The fix is to introduce proper scoping, but then it does not
> seem sensible to only allow one name for the type constructor
> parameter.
inout already has proper scoping: data external to the function
shouldn't be qualified as inout, it just should be checked.
More information about the Digitalmars-d
mailing list