shouting versus dotting
Denis Koroskin
2korden at gmail.com
Mon Oct 6 03:59:55 PDT 2008
On Mon, 06 Oct 2008 14:56:43 +0400, Michel Fortin
<michel.fortin at michelf.com> wrote:
> On 2008-10-05 22:23:16 -0400, Michel Fortin <michel.fortin at michelf.com>
> said:
>
>> Well, not so sure about that: I'm pretty sure it's needed for
>> disambiguation too. Let's say you have:
>> void foo(int x)();
>> void foo(T)(T x);
>> foo(5);
>> Is foo(5) a the same as foo!(5), or does it call foo!(int).foo(5) ?
>> Under the current rules, it's the second (you can write foo!(5) to call
>> the first). If you allow templates to be instanciated without the "!",
>> then I guess both will match and you'll have ambiguity.
>> If you could avoid having sets of parameters, one for the function and
>> one for the template, then you could get rid of the "!" in a snap...
>
> Or... we could just disallow having both at the same time, just like you
> can't have two functions with the same arguments. A call to foo(5) would
> be ambigous in the above situation, plain and simple. Is this reasonable?
>
> We could still disambiguate using:
>
> foo!(5);
>
> and:
>
> foo(int)(5);
>
> In this context, the ! becomes the "force this to be template arguments"
> operator, or the "do not deduce template arguments, I'll provide them"
> operator.
>
> Or we could just forget ! completely and leave the first one impossible
> to disambiguate.
>
> Which makes me think that it's sad we can't write the second as:
>
> foo(int, 5);
>
> I'd be much nicer to the eye.
>
If we don't omit parenthesises, the ambiguity goes away:
foo()(5)
foo(5)()
More information about the Digitalmars-d
mailing list