diff --git a/example/Jamfile.v2 b/example/Jamfile.v2
new file mode 100644
index 0000000..23706c0
--- /dev/null
+++ b/example/Jamfile.v2
@@ -0,0 +1,20 @@
+#  Boost.Function Library example Jamfile
+#
+#  Copyright (c) 2008 James E. King III
+#
+#  Distributed under the Boost Software License, Version 1.0. (See accompany-
+#  ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+import os ;
+import testing ;
+
+project
+    :   requirements
+    ;
+
+test-suite "function-examples"
+   :    [ run bind1st.cpp ]
+        [ run int_div.cpp ]
+        [ run sum_avg.cpp ]
+   ;
+
diff --git a/example/bind1st.cpp b/example/bind1st.cpp
new file mode 100644
index 0000000..b9622c7
--- /dev/null
+++ b/example/bind1st.cpp
@@ -0,0 +1,32 @@
+// Boost.Function library examples
+
+//  Copyright Douglas Gregor 2001-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#include <iostream>
+#include <boost/function.hpp>
+#include <functional>
+
+struct X {
+  X(int val) : value(val) {}
+
+  int foo(int x) { return x * value; }
+
+  int value;
+};
+
+
+int
+main()
+{
+  boost::function<int (int)> f;
+  X x(7);
+  f = std::bind1st(std::mem_fun(&X::foo), &x);
+
+  std::cout << f(5) << std::endl; // Call x.foo(5)
+  return 0;
+}
diff --git a/example/int_div.cpp b/example/int_div.cpp
new file mode 100644
index 0000000..7218bd0
--- /dev/null
+++ b/example/int_div.cpp
@@ -0,0 +1,26 @@
+// Boost.Function library examples
+
+//  Copyright Douglas Gregor 2001-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#include <iostream>
+#include <boost/function.hpp>
+
+struct int_div {
+  float operator()(int x, int y) const { return ((float)x)/y; };
+};
+
+int
+main()
+{
+  boost::function<float (int, int)> f;
+  f = int_div();
+
+  std::cout << f(5, 3) << std::endl; // 1.66667
+
+  return 0;
+}
diff --git a/example/sum_avg.cpp b/example/sum_avg.cpp
new file mode 100644
index 0000000..8831ef1
--- /dev/null
+++ b/example/sum_avg.cpp
@@ -0,0 +1,38 @@
+// Boost.Function library examples
+
+//  Copyright Douglas Gregor 2001-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#include <iostream>
+#include <boost/function.hpp>
+
+void do_sum_avg(int values[], int n, int& sum, float& avg)
+{
+  sum = 0;
+  for (int i = 0; i < n; i++)
+    sum += values[i];
+  avg = (float)sum / n;
+}
+
+int
+main()
+{
+  // The second parameter should be int[], but some compilers (e.g., GCC)
+  // complain about this
+  boost::function<void (int*, int, int&, float&)> sum_avg;
+
+  sum_avg = &do_sum_avg;
+
+  int values[5] = { 1, 1, 2, 3, 5 };
+  int sum;
+  float avg;
+  sum_avg(values, 5, sum, avg);
+
+  std::cout << "sum = " << sum << std::endl;
+  std::cout << "avg = " << avg << std::endl;
+  return 0;
+}
