Pure, Nothrow in Generic Programming
Simen kjaeraas
simen.kjaras at gmail.com
Wed Nov 25 15:04:32 PST 2009
On Sun, 22 Nov 2009 20:34:21 +0100, dsimcha <dsimcha at yahoo.com> wrote:
> One issue that should ideally be resolved before D2 is finalized that I
> meant
> to bring up here a long time ago is how to handle pure and nothrow in
> generic
> functions. For example:
>
> T max(T)(T lhs, T rhs) {
> return (lhs > rhs) ? lhs : rhs;
> }
>
> Obviously, if T is an int, max can be pure nothrow. However, if T is
> some
> user defined type, then who knows? I've run into a few cases where I'm
> writing a pure function that needs to call something simple like
> std.algorithm.max() on an int or a float and invariably I end up just
> rewriting a max function for my specific type and marking it as pure
> nothrow.
> This is obviously a suboptimial solution.
>
> Since the source needs to be available anyhow for templates to be
> usable, my
> proposal would be for pure/nothrow functions to be able to call templated
> functions that are not marked as pure/nothrow as long as they would
> compile if
> marked pure/nothrow. Also, I think that we need to establish a strong
> convention, for objects, that opCmp, opEquals and a few other "standard"
> functions should always be const pure nothrow, and that it is acceptable
> for
> any library code (mixins, etc.) to assume this.
Votes++;
--
Simen
More information about the Digitalmars-d
mailing list