Jump to page: 1 2
Thread overview
const property don't wont return const reference to value
Dec 23, 2012
Zhenya
Dec 23, 2012
Rainer Schuetze
Dec 23, 2012
Zhenya
Dec 23, 2012
Namespace
Dec 23, 2012
bearophile
Dec 23, 2012
Namespace
Dec 23, 2012
bearophile
Dec 24, 2012
monarch_dodra
Dec 24, 2012
Jonathan M Davis
Dec 24, 2012
Monarch Dodra
Dec 24, 2012
Jonathan M Davis
Dec 23, 2012
Jonathan M Davis
Dec 23, 2012
Namespace
Dec 23, 2012
Jonathan M Davis
December 23, 2012
Hi!
Explain me please what's wrong with this code:

module main;

struct foo
{
	int m_bar;
	@property const ref int bar() const
	{
		return m_bar;
	}
}

void main()
{
}

Error: cast(int)this.m_bar is not an lvalue
December 23, 2012

On 23.12.2012 14:20, Zhenya wrote:
>      @property const ref int bar() const

The first const does not bind to the return type, but to the whole declaration, so it does the same as the const at the end. You should use

    @property ref const(int) bar() const
December 23, 2012
On Sunday, 23 December 2012 at 13:37:33 UTC, Rainer Schuetze wrote:
>
>
> On 23.12.2012 14:20, Zhenya wrote:
>>     @property const ref int bar() const
>
> The first const does not bind to the return type, but to the whole declaration, so it does the same as the const at the end. You should use
>
>     @property ref const(int) bar() const

Thank you very much!
December 23, 2012
On Sunday, 23 December 2012 at 13:37:33 UTC, Rainer Schuetze wrote:
>
>
> On 23.12.2012 14:20, Zhenya wrote:
>>     @property const ref int bar() const
>
> The first const does not bind to the return type, but to the whole declaration, so it does the same as the const at the end. You should use
>
>     @property ref const(int) bar() const

Shouldn't we fix this? Most of the Newcomer are confused with the fact, that there are two ways to define a function/method as const and that they have to write const(ReturnType) and not const ReturnType.
December 23, 2012
Namespace:

> Shouldn't we fix this? Most of the Newcomer are confused with the fact,

Take a look in bugzilla. I opened an enhancement request to fix this situation, but Walter has closed it down. The rationale is to keep uniform the way D manages tags like const, immutable, etc.

I don't agree with him in this case: I agree that uniformity is good, but breaking symmetry is acceptable when it just produces an error and when it helps avoid a common mistake.

If you have strong desires about fixing this, then I suggest you to open a new thread about it in the main D newsgroup. I have already fought this battle and I lost. (And I think this time Jonathan was on my side).

Bye,
bearophile
December 23, 2012
On Sunday, 23 December 2012 at 14:55:30 UTC, bearophile wrote:
> Namespace:
>
>> Shouldn't we fix this? Most of the Newcomer are confused with the fact,
>
> Take a look in bugzilla. I opened an enhancement request to fix this situation, but Walter has closed it down. The rationale is to keep uniform the way D manages tags like const, immutable, etc.
>
> I don't agree with him in this case: I agree that uniformity is good, but breaking symmetry is acceptable when it just produces an error and when it helps avoid a common mistake.
>
> If you have strong desires about fixing this, then I suggest you to open a new thread about it in the main D newsgroup. I have already fought this battle and I lost. (And I think this time Jonathan was on my side).
>
> Bye,
> bearophile

I have to write "const (ReturnType)"  and "ref ReturnType" ... very symetric. But I think that Walter thinks that this is the best idea, and of course better than that what C++ and other languages do​​. So what should I waste my time with "war" with my limited english knowledge ? ;)
But thank you, that you tried it.

Maybe this is something for Romulus... :)
December 23, 2012
Namespace:

> So what should I waste my time with "war" with my limited english knowledge ? ;)
> But thank you, that you tried it.

Your English improves if you want it, and you exercise yourself.

And such "wars" are not always useless, because while Walter is very experienced and usually strong willed, he isn't always right. In several situations we/I have eventually changed his mind for the better.

Bye,
bearophile
December 23, 2012
On Sunday, December 23, 2012 15:41:09 Namespace wrote:
> On Sunday, 23 December 2012 at 13:37:33 UTC, Rainer Schuetze
> 
> wrote:
> > On 23.12.2012 14:20, Zhenya wrote:
> >>     @property const ref int bar() const
> > 
> > The first const does not bind to the return type, but to the whole declaration, so it does the same as the const at the end. You should use
> > 
> >     @property ref const(int) bar() const
> 
> Shouldn't we fix this? Most of the Newcomer are confused with the fact, that there are two ways to define a function/method as const and that they have to write const(ReturnType) and not const ReturnType.

No one has been able to convince Walter. He thinks that the consistency of allowing function attributes on both sides trumps fixing the problems caused by having const or immutable on the left.

- Jonathan M Davis
December 23, 2012
> No one has been able to convince Walter. He thinks that the consistency of
> allowing function attributes on both sides trumps fixing the problems caused by
> having const or immutable on the left.
>
> - Jonathan M Davis

It is more confusing than anything else but as I said I would waste my time with convince Walter.
What is your opinion?
December 23, 2012
On Sunday, December 23, 2012 21:34:25 Namespace wrote:
> > No one has been able to convince Walter. He thinks that the
> > consistency of
> > allowing function attributes on both sides trumps fixing the
> > problems caused by
> > having const or immutable on the left.
> > 
> > - Jonathan M Davis
> 
> It is more confusing than anything else but as I said I would
> waste my time with convince Walter.
> What is your opinion?

On which? Whether it should be changed or whether it's worth your time trying to convince Walter? I'd definitely argue that putting const and immutable on the left should be made illegal. The consistency is not worth the problems that it causes. But I doubt that there's much hope of convincing Walter at this point. The fact that newbies screw it up all the time clearly isn't enough to convince him, or he would have relented in the past. And that's really the only argument AFAIK, since if you know what you're doing, it's trivial to avoid the problem.

- Jonathan M Davis
« First   ‹ Prev
1 2