- bool() called without arguments now returns False rather than
  raising an exception.  This is consistent with calling the
  constructors for the other builtin types -- called without argument
  they all return the false value of that type.  (SF patch #724135)
  Thanks to Alex Martelli.
diff --git a/Lib/test/test_bool.py b/Lib/test/test_bool.py
index 404b4e8..a0a03ee 100644
--- a/Lib/test/test_bool.py
+++ b/Lib/test/test_bool.py
@@ -137,6 +137,7 @@
 veris(bool(0), False)
 veris(bool("hello"), True)
 veris(bool(""), False)
+veris(bool(), False)
 
 veris(hasattr([], "append"), True)
 veris(hasattr([], "wobble"), False)
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index 49f58e0..4adbb40 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -86,6 +86,10 @@
 if 1 != 1L or 1 != 1.0 or 1L != 1.0: raise TestFailed, 'mixed comparisons'
 if -1 != -1L or -1 != -1.0 or -1L != -1.0:
     raise TestFailed, 'int/long/float value not equal'
+# calling built-in types without argument must return 0
+if int() != 0: raise TestFailed, 'int() does not return 0'
+if long() != 0L: raise TestFailed, 'long() does not return 0L'
+if float() != 0.0: raise TestFailed, 'float() does not return 0.0'
 if int(1.9) == 1 == int(1.1) and int(-1.1) == -1 == int(-1.9): pass
 else: raise TestFailed, 'int() does not round properly'
 if long(1.9) == 1L == long(1.1) and long(-1.1) == -1L == long(-1.9): pass
@@ -214,6 +218,8 @@
 
 
 print '6.5.2 Tuples'
+# calling built-in types without argument must return empty
+if tuple() != (): raise TestFailed,'tuple() does not return ()'
 if len(()) != 0: raise TestFailed, 'len(())'
 if len((1,)) != 1: raise TestFailed, 'len((1,))'
 if len((1,2,3,4,5,6)) != 6: raise TestFailed, 'len((1,2,3,4,5,6))'
@@ -251,6 +257,8 @@
 vereq(list(tuple(f())), range(1000))
 
 print '6.5.3 Lists'
+# calling built-in types without argument must return empty
+if list() != []: raise TestFailed,'list() does not return []'
 if len([]) != 0: raise TestFailed, 'len([])'
 if len([1,]) != 1: raise TestFailed, 'len([1,])'
 if len([1,2,3,4,5,6]) != 6: raise TestFailed, 'len([1,2,3,4,5,6])'
@@ -441,6 +449,8 @@
 
 
 print '6.6 Mappings == Dictionaries'
+# calling built-in types without argument must return empty
+if dict() != {}: raise TestFailed,'dict() does not return {}'
 d = {}
 if d.keys() != []: raise TestFailed, '{}.keys()'
 if d.values() != []: raise TestFailed, '{}.values()'
diff --git a/Misc/NEWS b/Misc/NEWS
index a90c8fc..a637100 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,11 @@
 Core and builtins
 -----------------
 
+- bool() called without arguments now returns False rather than
+  raising an exception.  This is consistent with calling the
+  constructors for the other builtin types -- called without argument
+  they all return the false value of that type.  (SF patch #724135)
+
 - In support of PEP 269 (making the pgen parser generator accessible
   from Python), some changes to the pgen code structure were made; a
   few files that used to be linked only with pgen are now linked with
diff --git a/Objects/boolobject.c b/Objects/boolobject.c
index af6150d..f2429fe 100644
--- a/Objects/boolobject.c
+++ b/Objects/boolobject.c
@@ -51,10 +51,10 @@
 bool_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
 	static char *kwlist[] = {"x", 0};
-	PyObject *x;
+	PyObject *x = Py_False;
 	long ok;
 
-	if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:bool", kwlist, &x))
+	if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:bool", kwlist, &x))
 		return NULL;
 	ok = PyObject_IsTrue(x);
 	if (ok < 0)