digitalmars.D.learn - const property don't wont return const reference to value
- Zhenya (15/15) Dec 23 2012 Hi!
- Rainer Schuetze (4/5) Dec 23 2012 The first const does not bind to the return type, but to the whole
- Zhenya (3/9) Dec 23 2012 Thank you very much!
- Namespace (6/12) Dec 23 2012 Shouldn't we fix this? Most of the Newcomer are confused with the
- bearophile (13/15) Dec 23 2012 Take a look in bugzilla. I opened an enhancement request to fix
- Namespace (8/24) Dec 23 2012 I have to write "const (ReturnType)" and "ref ReturnType" ...
- bearophile (8/11) Dec 23 2012 Your English improves if you want it, and you exercise yourself.
- monarch_dodra (11/40) Dec 24 2012 "ref" is a function qualifier, not a type qualifier, so you could
- Jonathan M Davis (11/23) Dec 24 2012 I'm pretty sure that ref is nonsensical in that example. What would ref ...
- Monarch Dodra (8/40) Dec 24 2012 Wait, never mind that. I thought that was legal.
- Jonathan M Davis (4/6) Dec 24 2012 Which should probably be fixed IMHO. Regardless, in Phobos or druntime, ...
- Jonathan M Davis (5/21) Dec 23 2012 No one has been able to convince Walter. He thinks that the consistency ...
- Namespace (3/9) Dec 23 2012 It is more confusing than anything else but as I said I would
- Jonathan M Davis (10/21) Dec 23 2012 On which? Whether it should be changed or whether it's worth your time t...
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
Dec 23 2012
On 23.12.2012 14:20, Zhenya wrote:property const ref int bar() constThe 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
Dec 23 2012
On Sunday, 23 December 2012 at 13:37:33 UTC, Rainer Schuetze wrote:On 23.12.2012 14:20, Zhenya wrote:Thank you very much!property const ref int bar() constThe 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
Dec 23 2012
On Sunday, 23 December 2012 at 13:37:33 UTC, Rainer Schuetze wrote:On 23.12.2012 14:20, Zhenya wrote: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.property const ref int bar() constThe 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
Dec 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
Dec 23 2012
On Sunday, 23 December 2012 at 14:55:30 UTC, bearophile wrote:Namespace: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... :)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
Dec 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
Dec 23 2012
On Sunday, 23 December 2012 at 15:05:16 UTC, Namespace wrote:On Sunday, 23 December 2012 at 14:55:30 UTC, bearophile wrote:"ref" is a function qualifier, not a type qualifier, so you could even write it as: "const(ReturnType) foo() const ref;" So technically, it is symetric. I for one don't think this is a huge problem. There is *some* confusion for those comming from C++, but they (we) have to learn D is not C++. Besides, I like the liberty of putting all qualifiers on the line before the types, including const. If anything "const" *itself* is VERY confusing for new commers. WAY more than the syntax used to qualify a function with it.Namespace: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... :)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
Dec 24 2012
On Monday, December 24, 2012 14:32:55 monarch_dodra wrote:"ref" is a function qualifier, not a type qualifier, so you could even write it as: "const(ReturnType) foo() const ref;" So technically, it is symetric.I'm pretty sure that ref is nonsensical in that example. What would ref on a function even mean? It could be used on a function pointer, but then you'd have to have the function keyword in there. It makes no sense on a function prototype like you have there. If that compiles, it's because dmd allows you to put all kinds of modifiers on symbols where the modifier has no effect and arguably shouldn't be legal.I for one don't think this is a huge problem. There is *some* confusion for those comming from C++, but they (we) have to learn D is not C++. Besides, I like the liberty of putting all qualifiers on the line before the types, including const. If anything "const" *itself* is VERY confusing for new commers. WAY more than the syntax used to qualify a function with it.You're likely to be told to move the const to the right if one of us notices it on the left in a pull request. I believe that quite a few of us consider it to be bad practice to put it on the left. - Jonathan M Davis
Dec 24 2012
On Monday, 24 December 2012 at 15:52:01 UTC, Jonathan M Davis wrote:On Monday, December 24, 2012 14:32:55 monarch_dodra wrote:Wait, never mind that. I thought that was legal. I was mentioning the fact that if you want to know if a function returns ref, you have check that function's attributes: http://dlang.org/phobos/std_traits.html#FunctionAttribute"ref" is a function qualifier, not a type qualifier, so you could even write it as: "const(ReturnType) foo() const ref;" So technically, it is symetric.I'm pretty sure that ref is nonsensical in that example. What would ref on a function even mean? It could be used on a function pointer, but then you'd have to have the function keyword in there. It makes no sense on a function prototype like you have there. If that compiles, it's because dmd allows you to put all kinds of modifiers on symbols where the modifier has no effect and arguably shouldn't be legal.That's the way the ddoc is generated anyways: Everything on the left.I for one don't think this is a huge problem. There is *some* confusion for those comming from C++, but they (we) have to learn D is not C++. Besides, I like the liberty of putting all qualifiers on the line before the types, including const. If anything "const" *itself* is VERY confusing for new commers. WAY more than the syntax used to qualify a function with it.You're likely to be told to move the const to the right if one of us notices it on the left in a pull request. I believe that quite a few of us consider it to be bad practice to put it on the left. - Jonathan M Davis
Dec 24 2012
On Monday, December 24, 2012 17:25:05 Monarch Dodra wrote:That's the way the ddoc is generated anyways: Everything on the left.Which should probably be fixed IMHO. Regardless, in Phobos or druntime, if const is found on the left, it gets moved to the right. - Jonathan M Davis
Dec 24 2012
On Sunday, December 23, 2012 15:41:09 Namespace wrote:On Sunday, 23 December 2012 at 13:37:33 UTC, Rainer Schuetze 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 DavisOn 23.12.2012 14:20, Zhenya wrote: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.property const ref int bar() constThe 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
Dec 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 DavisIt is more confusing than anything else but as I said I would waste my time with convince Walter. What is your opinion?
Dec 23 2012
On Sunday, December 23, 2012 21:34:25 Namespace wrote: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 DavisNo 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 DavisIt is more confusing than anything else but as I said I would waste my time with convince Walter. What is your opinion?
Dec 23 2012