Thread overview
why no to!bool(0) or to!bool(1) ?
Aug 27, 2013
growler
Aug 27, 2013
Jesse Phillips
Aug 27, 2013
H. S. Teoh
Aug 27, 2013
growler
Aug 27, 2013
growler
August 27, 2013
Is there any reason why the following code fails to compile?

---
auto bfalse = to!bool(0);
auto btrue = to!bool(1);
---
dmd2/src/phobos/std/conv.d(329): Error: template std.conv.toImpl
cannot deduce template function from argument types !(bool)(int)


I can use a string, like so:
---
auto bfalse = to!bool("false");
auto btrue = to!bool("true");
---
...but usually the database column is an INTEGER type.

I can cast(bool)(0) or cast(bool)(1) no problem but I much prefer
to!bool.

Thanks,
G.
August 27, 2013
On Tuesday, 27 August 2013 at 04:08:47 UTC, growler wrote:
> Is there any reason why the following code fails to compile?
>
> ---
> auto bfalse = to!bool(0);
> auto btrue = to!bool(1);
> ---
> dmd2/src/phobos/std/conv.d(329): Error: template std.conv.toImpl
> cannot deduce template function from argument types !(bool)(int)

No one implemented probably. BTW:

void main() {
     bool a = 0;
     bool b = 1;

     assert(!a);
     assert(b);
}
August 27, 2013
On Tue, Aug 27, 2013 at 07:12:56AM +0200, Jesse Phillips wrote:
> On Tuesday, 27 August 2013 at 04:08:47 UTC, growler wrote:
> >Is there any reason why the following code fails to compile?
> >
> >---
> >auto bfalse = to!bool(0);
> >auto btrue = to!bool(1);
> >---
> >dmd2/src/phobos/std/conv.d(329): Error: template std.conv.toImpl
> >cannot deduce template function from argument types !(bool)(int)
> 
> No one implemented probably. BTW:
> 
> void main() {
>      bool a = 0;
>      bool b = 1;
> 
>      assert(!a);
>      assert(b);
> }

Hmm. Maybe file an enhancement request here:

	http://d.puremagic.com/issues


T

-- 
"I'm not childish; I'm just in touch with the child within!" - RL
August 27, 2013
On Tuesday, 27 August 2013 at 05:13:01 UTC, Jesse Phillips wrote:
> On Tuesday, 27 August 2013 at 04:08:47 UTC, growler wrote:
>> Is there any reason why the following code fails to compile?
>>
>> ---
>> auto bfalse = to!bool(0);
>> auto btrue = to!bool(1);
>> ---
>> dmd2/src/phobos/std/conv.d(329): Error: template std.conv.toImpl
>> cannot deduce template function from argument types !(bool)(int)
>
> No one implemented probably. BTW:

No worries, thanks for the info.

>
> void main() {
>      bool a = 0;
>      bool b = 1;
>
>      assert(!a);
>      assert(b);
> }

The implicit conversion is only for literals and besides, I have
this sort of hackiness happening:

alias typeof(s.tueplof[ii]) FieldType;
s.tupleof[ii] = value.to!FieldType;

I just stick in a static-if(isBoolean!FieldType) and all is well.

Thanks,
G
August 27, 2013
On Tuesday, 27 August 2013 at 05:22:00 UTC, H. S. Teoh wrote:
> On Tue, Aug 27, 2013 at 07:12:56AM +0200, Jesse Phillips wrote:
>> On Tuesday, 27 August 2013 at 04:08:47 UTC, growler wrote:
>> >Is there any reason why the following code fails to compile?
>> >
>> >---
>> >auto bfalse = to!bool(0);
>> >auto btrue = to!bool(1);
>> >---
>> >dmd2/src/phobos/std/conv.d(329): Error: template std.conv.toImpl
>> >cannot deduce template function from argument types !(bool)(int)
>> 
>> No one implemented probably. BTW:
>> 
>> void main() {
>>      bool a = 0;
>>      bool b = 1;
>> 
>>      assert(!a);
>>      assert(b);
>> }
>
> Hmm. Maybe file an enhancement request here:
>
> 	http://d.puremagic.com/issues
>
>
> T

Done.

http://d.puremagic.com/issues/show_bug.cgi?id=10909

Thanks,
G.