Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
September 08, 2018 Error: expression `update` of type `void` does not have a boolean value | ||||
---|---|---|---|---|
| ||||
auto foo(bool update = false)() { static if(update) { } } and the compiler, after upgrading to 2.082 from 2.080 now says: Error: expression `update` of type `void` does not have a boolean value when update is clearly a bool. Why the hell is the compiler now thinking update is a void? 1. This code compiles fine in a test app and 2. when I rename update to something else it works fine. 2. There is no other use of update in the entire module(not that it should matter) Seems this is a compiler bug but only has a problem in context. Remember, it worked find before I updated dmd and there is no reason why it shouldn't work. |
September 08, 2018 Re: Error: expression `update` of type `void` does not have a boolean value | ||||
---|---|---|---|---|
| ||||
Posted in reply to Josphe Brigmo | On Saturday, 8 September 2018 at 03:12:56 UTC, Josphe Brigmo wrote:
> auto foo(bool update = false)()
> {
> static if(update)
> { }
> }
>
> and the compiler, after upgrading to 2.082 from 2.080 now says:
>
> Error: expression `update` of type `void` does not have a boolean value
>
> when update is clearly a bool.
>
> Why the hell is the compiler now thinking update is a void?
>
> 1. This code compiles fine in a test app and 2. when I rename update to something else it works fine.
>
> 2. There is no other use of update in the entire module(not that it should matter)
>
> Seems this is a compiler bug but only has a problem in context. Remember, it worked find before I updated dmd and there is no reason why it shouldn't work.
Could you show some more code, as this works for me:
´´´
import std.stdio;
void main()
{
foo;
}
auto foo(bool update = false)()
{
static if(update)
{
}
}
´´´
compiled with
dmd --version
DMD64 D Compiler v2.082.0
Copyright (C) 1999-2018 by The D Language Foundation, All Rights Reserved written by Walter Bright
dmd ./source/app.d
used on a Mac with Darwin Kernel Version 17.7.0
|
September 08, 2018 Re: Error: expression `update` of type `void` does not have a boolean value | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alex | On Saturday, 8 September 2018 at 05:39:39 UTC, Alex wrote:
> On Saturday, 8 September 2018 at 03:12:56 UTC, Josphe Brigmo wrote:
>> auto foo(bool update = false)()
>> {
>> static if(update)
>> { }
>> }
>>
>> and the compiler, after upgrading to 2.082 from 2.080 now says:
>>
>> Error: expression `update` of type `void` does not have a boolean value
>>
>> when update is clearly a bool.
>>
>> Why the hell is the compiler now thinking update is a void?
>>
>> 1. This code compiles fine in a test app and 2. when I rename update to something else it works fine.
>>
>> 2. There is no other use of update in the entire module(not that it should matter)
>>
>> Seems this is a compiler bug but only has a problem in context. Remember, it worked find before I updated dmd and there is no reason why it shouldn't work.
>
> Could you show some more code, as this works for me:
>
> ´´´
> import std.stdio;
>
> void main()
> {
> foo;
> }
>
> auto foo(bool update = false)()
> {
> static if(update)
> {
>
> }
> }
> ´´´
>
> compiled with
> dmd --version
> DMD64 D Compiler v2.082.0
> Copyright (C) 1999-2018 by The D Language Foundation, All Rights Reserved written by Walter Bright
>
> dmd ./source/app.d
>
> used on a Mac with Darwin Kernel Version 17.7.0
I can't, the code is from a very large project and it's too intertwined.
I already said it worked in simple form and that it worked with a previous compiler, so this is a regression.
Changing no code and only swapping compilers produces this bug...
and as you can see, it's obviously a bug given the form of the function and the error message and that it worked before without changes.
Why the specific term update? I don't know.
My project does not use the term update at all in any other context except that one. But I did find:
void update(K, V, C, U)(ref V[K] aa, K key, scope C create, scope U update)
|
September 08, 2018 Re: Error: expression `update` of type `void` does not have a boolean value | ||||
---|---|---|---|---|
| ||||
Posted in reply to Josphe Brigmo | On Saturday, 8 September 2018 at 06:56:40 UTC, Josphe Brigmo wrote: > > My project does not use the term update at all in any other context except that one. But I did find: > > void update(K, V, C, U)(ref V[K] aa, K key, scope C create, scope U update) Ok... found something here: https://dlang.org/changelog/2.082.0.html#require_update and here: https://dlang.org/spec/hash-map.html#advanced_updating It seems, they were added in 2.082.0. No idea why they are conflicting with your existing code, however... And even whether they are the source of conflict... |
September 08, 2018 Re: Error: expression `update` of type `void` does not have a boolean value | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alex | On Saturday, 8 September 2018 at 07:30:35 UTC, Alex wrote:
> On Saturday, 8 September 2018 at 06:56:40 UTC, Josphe Brigmo wrote:
>>
>> My project does not use the term update at all in any other context except that one. But I did find:
>>
>> void update(K, V, C, U)(ref V[K] aa, K key, scope C create, scope U update)
>
> Ok... found something here:
>
> https://dlang.org/changelog/2.082.0.html#require_update
> and here:
> https://dlang.org/spec/hash-map.html#advanced_updating
>
> It seems, they were added in 2.082.0.
>
> No idea why they are conflicting with your existing code, however... And even whether they are the source of conflict...
obviously who ever added it screwed the pooch.
|
September 08, 2018 Re: Error: expression `update` of type `void` does not have a boolean value | ||||
---|---|---|---|---|
| ||||
Posted in reply to Josphe Brigmo | On Saturday, 8 September 2018 at 03:12:56 UTC, Josphe Brigmo wrote:
> auto foo(bool update = false)()
> {
> static if(update)
> { }
> }
>
> and the compiler, after upgrading to 2.082 from 2.080 now says:
>
> Error: expression `update` of type `void` does not have a boolean value
>
> when update is clearly a bool.
>
> Why the hell is the compiler now thinking update is a void?
>
> 1. This code compiles fine in a test app and 2. when I rename update to something else it works fine.
>
> 2. There is no other use of update in the entire module(not that it should matter)
>
> Seems this is a compiler bug but only has a problem in context. Remember, it worked find before I updated dmd and there is no reason why it shouldn't work.
- put
`pragma(msg, __FILE_FULL_PATH__ ~ "(" ~ __LINE__.stringof ~ "):" ~
typeof(return).stringof);`
in your update function.
- recompile.
- look at the compiler output
You should be sure at this point if the problem comes from your update function of from the recent addition in object.d
|
Copyright © 1999-2021 by the D Language Foundation