shouting versus dotting
Denis Koroskin
2korden at gmail.com
Tue Oct 7 09:09:29 PDT 2008
On Tue, 07 Oct 2008 20:05:28 +0400, Benji Smith <dlanguage at benjismith.net>
wrote:
> Andrei Alexandrescu wrote:
>> Benji Smith wrote:
>>> Andrei Alexandrescu wrote:
>>>> b) Template at Arg and Template@(Args)
>>>>
>>>> This approach not only accepts the need for a contraption, it
>>>> actually leverages it by allowing you to drop the parens if you only
>>>> have one argument. That way "@" becomes a true operator, the template
>>>> instantiation operator. Note that this can be done with the current
>>>> "!" as well, except that Template!Arg does not look to me like
>>>> anything enticing.
>>>
>>> Interesting.
>>>
>>> // If this is possible.......
>>> auto myTemplate = Template @ (1, 2, 3, uint);
>>>
>>> // ......shouldn't this be possible too?
>>> auto args = (1, 2, 3, uint);
>>> auto myTemplate = Template @ args;
>>>
>>> All other binary operators can operate on either a literal or on an
>>> expression, and I'd expect a template instantiation operator to do the
>>> same.
>>>
>>> What do you think?
>> I think you will have a hard time (re)using parentheses and commas to
>> define literals.
>> Andrei
>
> The actual syntax I used isn't important. That's not what I was talking
> about.
>
> It was the idea that template instantiation is the result of a binary
> operator. Which, to me, implies that the operands could be either
> literals or other types of expressions. I suppose the real syntax would
> be more like this:
>
> auto args = Tuple @ (1, 2, 3, real);
> auto myTemplate = Template @ args;
>
> So, if "@" is a binary operator, it has two operands: a template name
> and an argument list. But, currently, there's no way to express either
> of those constructs symbolically. Only literally.
>
> It seems to me that, in your proposal, "@" is not really an operator. It
> might act a little bit like an operator, but since its operands can't
> exist by themselves, then they're not really operands. And "@" is not an
> operator.
>
> It'd be cool if template instantiation really was the result of an
> operator, with all of the necessary implications regarding the operands.
>
> Of course, I'm not actually *proposing* that implementation. I'm just
> drawing a fine line in the sand delineating what it actually means to be
> an "operator" rather than "template syntax".
>
> --benji
You could do it this way:
alias Tuple@(1,2,3,real) Args;
alias Template at Args MyTemplate;
More information about the Digitalmars-d
mailing list