(This is a quotation from http://d.puremagic.com/issues/show_bug.cgi?id=9999<http://d.puremagic.com/issues/show_bug.cgi?id=9999#c4> )
> I do not agree with this enhancement. First off, making special cases for > partial ordering takes a simple, straightforward idea and turns it into a > potential morass of conflicting cases that we'll be stuck with forever. > Secondly, the only issue here is whether '1' should be implicitly convertible > to 'bool'. Walter, I can understand your concern. But I think it would not be so big. Because the possibility of extending basic type set is not so much in the future. Keeping language spec simple is necessary, but also reduce special rule for humans is also important. This is a much rare case that is the mismatch between simple rule and natural behavior for human. Fixing this issue would be valuable for many D users. Logically 'true' and 'false' are not related to any integer values. Although it is widely known and used, considering boolean type as a kind of specialized integer type is not general - it is implementation detail. At least it comes from C language. In old ages, boolean type had not been supported properly in many programming languages, but today, languages which not supporting it would not regarded as useful. D is a modern programming language, so more proper behavior for boolean type is necessary. As one of its goal, D should aim the successor of C. Therefore, we cannot drop the implicit conversion between bool and other integer types which inherited from C. But this problem behavior is definitely unnatural for many programmers, and would enforce to study bad know-how for them. Loosing future users for the compiler simplicity is not good decision. Of course, balance is necessary there, but I think this is necessary complexity. Kenji Hara 2013/4/28 kenji hara <[email protected]> > 2013/4/28 Walter Bright <[email protected]> > >> On 4/27/2013 8:11 AM, kenji hara wrote: >> >>> Walter, now I changed my opinion. It seems not correct that being >>> regarded bool >>> type as one of the integer. >>> How about? >>> >> >> Both C and C++ regard bool as an integer, and implicitly convert 1/0 to >> true/false. >> >> What C++ doesn't have is VRP and partial ordering of functions. (But it >> does have partial ordering of template functions.) >> > > I'm not argue that we should remove the implicit conversion from 1/0 to > bool. > > I don't have so much knowledge about C/C++ language spec, but for the > issue case C++ makes "ambiguous error". > Contrary of that, D's current behavior looks to me it is going back to > past. > > Kenji Hara >
