The Sweet With
Tomasz
Tomasz
Tue Mar 10 10:17:45 PDT 2009
Sergey Gromov Wrote:
> Thu, 05 Mar 2009 07:38:23 -0500, Tomasz Sowiński wrote:
>
> > Walter Bright Wrote:
> >
> >> It looks nice, but has a subtle and disastrous problem. In D, arguments
> >> are fully resolved *before* overloading is done. If some of the
> >> overloads have with declarations, then there's a nightmarish problem of
> >> trying to mix overloading and argument resolution together.
> >
> > Not sure if I understand right. Can you write up a simple example of the nightmare?
> >
> > Tomek
>
> I think Walter means that types of argument expressions are determined
> first, and only then a set of compatible overloads is composed. Say you
> have
>
> enum Foo { one, two }
> int one;
>
> void bar(int x); // (1)
> void bar(with Foo x); // (2)
>
> bar(one);
>
> Currently, D will determine that expression 'one' is of type int, then
> search for bar(int) or compatible, and will find (1). With your
> proposal, you must first find all 'bar's, determine that *some* of them
> have 'with' arguments, and now what? Infer type for the first argument
> differently for (1) and (2), so that for (1) it's int, and for (2) it's
> Foo? Or add the Foo to the scope, so that the first argument is of type
> Foo even for (1)? I can't see a good solution.
A blunt one would be screaming out an error whenever the compiler has trouble choosing an overload. Would it be too hard to live with?
More information about the Digitalmars-d
mailing list