On 10/13/17 3:47 AM, Daniel Kozak wrote:
but it works ok with immutable, so until you really need to change bar
you can use
immutable bar = 9;
foo!byte(bar + 1);
Right, the reason why your original didn't work is the compiler
"forgets" that bar is 9 by the time it gets to the foo call.
On Friday, 13 October 2017 at 07:47:55 UTC, Daniel Kozak wrote:
but it works ok with immutable, so until you really need to
change bar you can use
immutable bar = 9;
foo!byte(bar + 1);
As Adam wrote two days ago: 'D doesn't do implicit narrowing
conversion... so x + 1 becomes int, but then
but it works ok with immutable, so until you really need to change bar you
can use
immutable bar = 9;
foo!byte(bar + 1);
On Fri, Oct 13, 2017 at 9:46 AM, Daniel Kozak wrote:
> Not sure :), I have forgoten byte+byte=int.
>
> On Thu, Oct 12, 2017 at 10:51 PM, kdevel via
Not sure :), I have forgoten byte+byte=int.
On Thu, Oct 12, 2017 at 10:51 PM, kdevel via Digitalmars-d-learn <
digitalmars-d-learn@puremagic.com> wrote:
> On Wednesday, 11 October 2017 at 07:09:26 UTC, Daniel Kozak wrote:
>
>> You can avoid cast:
>>
>> void foo(T)(T bar){...}
>>
>> byte bar = 9;
On Wednesday, 11 October 2017 at 07:09:26 UTC, Daniel Kozak wrote:
You can avoid cast:
void foo(T)(T bar){...}
byte bar = 9;
foo!byte(bar + byte(1));
Sure?
---
void foo(T)(T bar)
{
}
byte bar = 9;
void main ()
{
foo!byte(bar + byte(1));
}
---
byte2.d(7): Error: function
You can avoid cast:
void foo(T)(T bar){...}
byte bar = 9;
foo!byte(bar + byte(1));
or
byte bar = 9;
byte num = 1;
foo!byte(bar + num);
On Tue, Oct 10, 2017 at 9:55 PM, Chirs Forest via Digitalmars-d-learn <
digitalmars-d-learn@puremagic.com> wrote:
> I keep having to make casts like the
On Tue, 10 Oct 2017 19:55:36 +, Chirs Forest wrote:
> It wouldn't be so bad if I didn't have to use the word cast before each
> cast, bust since I have to specify both the word cast and the cast type
> and then wrap both the cast type and the value in brackets... it just
> explodes my code
On Tuesday, 10 October 2017 at 19:55:36 UTC, Chirs Forest wrote:
Why?
D inherited a silly rule from C where any arithmetic is promoted
to int first.
The big difference is D doesn't do implicit narrowing
conversion... so x + 1 becomes int, but then int to byte requires
an explicit cast
On Tuesday, 10 October 2017 at 19:55:36 UTC, Chirs Forest wrote:
I keep having to make casts like the following and it's really
rubbing me the wrong way:
void foo(T)(T bar){...}
byte bar = 9;
[...]
Why?
Because of integer promotion [1], which is inherited from C.
[1]
On Tuesday, 10 October 2017 at 19:55:36 UTC, Chirs Forest wrote:
I keep having to make casts like the following and it's really
rubbing me the wrong way:
void foo(T)(T bar){...}
byte bar = 9;
foo!byte(bar + 1); //Error: function foo!byte.foo (byte bar) is
not callable using argument types
I keep having to make casts like the following and it's really
rubbing me the wrong way:
void foo(T)(T bar){...}
byte bar = 9;
foo!byte(bar + 1); //Error: function foo!byte.foo (byte bar) is
not callable using argument types (int)
foo!byte(cast(byte)(bar + 1));
It wouldn't be so bad if I
11 matches
Mail list logo