On Wed, 25 May 2011 12:19:03 -0400, Andrei Alexandrescu <seewebsiteforem...@erdani.org> wrote:

On 5/25/11 10:48 AM, Steven Schveighoffer wrote:
On Wed, 25 May 2011 11:45:30 -0400, Don <nos...@nospam.com> wrote:

Steven Schveighoffer wrote:
On Wed, 25 May 2011 10:59:46 -0400, Don <nos...@nospam.com> wrote:

Robert Clipsham wrote:
On 24/05/2011 04:28, Jonathan M Davis wrote:
Thoughts on this?

I believe that the best and most likely to be implemented syntax
which has
been suggested (it was Andrei's idea IIRC) is to simply add
optional clauses
to attributes. So, instead of pure, you'd do pure(condition). If
the condition
is true, the templated function it's on is pure. If the condition
is false,
then the function isn't pure. Don't expect pure to become @pure or
nothrow to
become @nothrow though. I think that at this point, any attribute
which is a
keyword is going to stay one, and any attribute that has @ on the
front of it
is going to stay that way as well.

- Jonathan M Davis
Wouldn't it make sense to follow the same syntax as auto ref? auto
pure, auto nothrow, auto @safe etc? (Although I guess that doesn't
allow for conditions, nevermind :<)

'auto ref' is one of worst syntax anomalies in the language. It
should be a single keyword -- eg, 'autoref' -- it has nothing in
common with the other use of 'auto', and it's not necessarily 'ref'.
The current implementation is incorrect. In a correct implementation
auto ref *is* always ref.
-Steve

You're saying this example from the spec shouldn't compile?

auto ref foo() { return 3; } // value return

Yes. Auto ref is specifically to allow passing rvalues as references to
functions, not as a template that means either ref or not. At least,
that is my understanding from Andrei's description. I don't have a copy
of TDPL, but I think it's in there too.

-Steve

The example should work. "auto ref" means "ref if possible, otherwise drop it".

Wait, I thought auto ref was to allow rvalues to be passed by reference? I.e. given the function:

void foo(auto ref S s)

then you could call foo with an rvalue or an lvalue for s.

I swear every time you have an opinion on auto ref it changes :(

Or are there two different meanings depending on whether auto ref is a parameter or return value attribute?

-Steve

Reply via email to