www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 2532] New: '=' does not give a boolean result

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2532

           Summary: '=' does not give a boolean result
           Product: D
           Version: 2.022
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: adolf.mathias googlemail.com


Using a boolean assignment in an if condition e.g. as follows gives IMHO an
unjustified error message. When a new variable is declared in the if()
condition, everything is OK:

// tst.d
void main()
{ bool b;

  if(b=false) { b = true; }
  if(bool c=false) { c = true; }
}

$ dmd tst
tst.d(4): Error: '=' does not give a boolean result


-- 
Dec 21 2008
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2532






= does not give a boolean result for good reason: it's to avoid the common
mistake in C/C++ where:

if(x = 5) { ... }

is used when:

if(x == 5) { ... }

was meant.


-- 
Dec 21 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2532


2korden gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |INVALID





It works as designed. It is designed to avoid mistakes.

"if (var = expr) {" is disallowed on purpose to avoid mistakes where you
inteded to write "if (var == expr) {":

int a = ...;
if (a = 42) { // oops, what a typo! I ment if (a == 42) here...

Bool is no different from int in this expression.

However, "if (type var == expression) {" is not a valid construct, so there is
no chance to make a mistake and thus "if (type var = expression) {" is allowed.

There is no 'special cases' for bools.


-- 
Dec 21 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2532






The text of the message is not true if the variable being assigned to is
ALREADY a bool. I know that the syntax form 'if (a = b)' is to avoided, but to
say that, IN THIS CASE, the result is not a boolean is plainly wrong.

bool a;
bool b;
b = (a = true); // A boolean expression (a = true) is used to assign to 'b'.

As we know that (a = b) is a boolean expression, it seems wrong to say that it
is a boolean EXCEPT in an 'if' construct. We do this to no other data type.

So maybe the wording of the message can be changed to reflect what is actually
being disallowed. Something like ...
"The syntax form 'if (a = b)' is not allowed".
That takes the argument away from the datatype issue and makes it a syntax
issue instead.


-- 
Dec 21 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2532







Might "expression is not a valid condition" be better?


-- 
Dec 21 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2532


2korden gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|normal                      |enhancement
             Status|RESOLVED                    |REOPENED
         Resolution|INVALID                     |





Reopening as an enhancement.


-- 
Dec 22 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2532


gide nwawudu.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |diagnostic





Added keyword diagnostic.


-- 
Dec 22 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2532






Hmm... After all D has switched to strict booleans?


-- 
Dec 22 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2532


yebblies <yebblies gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |schveiguy yahoo.com



*** Issue 4163 has been marked as a duplicate of this issue. ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 13 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2532


yebblies <yebblies gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |patch
                 CC|                            |yebblies gmail.com



https://github.com/D-Programming-Language/dmd/pull/122

A better message for all?

Error: assignment cannot be used as a condition

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 13 2011
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2532


Walter Bright <bugzilla digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|REOPENED                    |RESOLVED
                 CC|                            |bugzilla digitalmars.com
         Resolution|                            |FIXED



00:46:56 PST ---
https://github.com/D-Programming-Language/dmd/commit/6279cb917ba926d2b2a14c28b23ff8e00871be27

https://github.com/D-Programming-Language/dmd/commit/772ff9a6009731cd509385d1d365d91398d39f7c

https://github.com/D-Programming-Language/dmd/commit/2f69b157fe06218cab0ebe6cf93d2f474d50a32f

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 08 2011