Rainer Deyke wrote:
On 10/19/2010 05:44, Don wrote:
Rainer Deyke wrote:
Simple.  If the template is in a library file, it's library code,
regardless of where it was instantiated.
The separation isn't clean. User code instantiates library code which
instantiates user code. Look at std.algorithm, for example.
Mixins and template alias parameters blur things even further.

There are exactly four possible situations:
  - Template in library code instantiated by library code.
  - Template in library code instantiated by user code.
  - Template in user code instantiated by library code.
  - Template in user code instantiated by user code.

These cases can be nested arbitrarily deep, but that doesn't add
additional cases.  If we categorically ignore where a template is
instantiated, the four cases reduce to just two:
  - Template in library code.
  - Template in user code.

Don't forget that delegate literals can be passed as template alias parameters; so can expressions. Problems get even more extreme when mixins are involved.

Example: Suppose we have warnings for possible numeric overflow. Then consider:
sort!"a*5<b"(x);
We should have a warning that 'a*5' may cause a numeric overflow. How can that be done?

Reply via email to