Index: libs/utility/operators_test.cpp
===================================================================
RCS file: /cvsroot/boost/boost/libs/utility/operators_test.cpp,v
retrieving revision 1.5
diff -u -r1.5 operators_test.cpp
--- libs/utility/operators_test.cpp	12 Aug 2002 15:05:23 -0000	1.5
+++ libs/utility/operators_test.cpp	12 Mar 2003 19:02:51 -0000
@@ -50,6 +50,7 @@
     class Wrapped1
         : boost::operators<Wrapped1<T> >
         , boost::shiftable<Wrapped1<T> >
+        , boost::bool_testable<Wrapped1<T> >
     {
     public:
         explicit Wrapped1( T v = T() ) : _value(v) {}
@@ -80,6 +81,7 @@
           { _value >>= x._value; return *this; }
         Wrapped1& operator++()               { ++_value; return *this; }
         Wrapped1& operator--()               { --_value; return *this; }
+        operator bool() const { return _value != 0; }
         
     private:
         T _value;
@@ -555,6 +557,12 @@
 
 #define PRIVATE_EXPR_TEST(e, t)  BOOST_TEST( ((e), (t)) )
 
+#define PRIVATE_BOOLEAN_EXPR_TEST(t, res)    BOOST_TEST(static_cast<bool>((t)) == (res))
+#if defined(BOOST_MSVC)
+    #define PRIVATE_MSVC_BOOL_TEST_WORKAROUND(x) (!!x)
+#else
+    #define PRIVATE_MSVC_BOOL_TEST_WORKAROUND(x) (x)
+#endif
 
 int
 test_main( int , char * [] )
@@ -631,7 +639,19 @@
 
     PRIVATE_EXPR_TEST( (i = i1 << i2), (i.value() == 4) );
     PRIVATE_EXPR_TEST( (i = i2 >> i1), (i.value() == 1) );
-    
+
+    PRIVATE_BOOLEAN_EXPR_TEST( i, false);
+    PRIVATE_BOOLEAN_EXPR_TEST( i1, true);
+    PRIVATE_BOOLEAN_EXPR_TEST( i2, true);
+    PRIVATE_BOOLEAN_EXPR_TEST(!i, true);
+    PRIVATE_BOOLEAN_EXPR_TEST(!i1, false);
+    PRIVATE_BOOLEAN_EXPR_TEST(!i2, false);
+    PRIVATE_BOOLEAN_EXPR_TEST(PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i)  && PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i2), false);
+    PRIVATE_BOOLEAN_EXPR_TEST(PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i)  || PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i2), true);
+    PRIVATE_BOOLEAN_EXPR_TEST(PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i1) && PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i2), false);
+    PRIVATE_BOOLEAN_EXPR_TEST(!i                                    && PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i2), false);
+    PRIVATE_BOOLEAN_EXPR_TEST(PRIVATE_MSVC_BOOL_TEST_WORKAROUND(i1) && !i, false);
+      
     cout << "Performed tests on MyInt objects.\n";
 
     MyLong j1(1);
