diff --git a/test/Jamfile.v2 b/test/Jamfile.v2
index 9b9a1a1..7f5d297 100644
--- a/test/Jamfile.v2
+++ b/test/Jamfile.v2
@@ -36,3 +36,8 @@ run nothrow_swap.cpp ;
run rvalues_test.cpp ;
compile function_typeof_test.cpp ;
run result_arg_types_test.cpp ;
+
+lib throw_bad_function_call : throw_bad_function_call.cpp : shared:THROW_BAD_FUNCTION_CALL_DYN_LINK=1 ;
+
+run test_bad_function_call.cpp throw_bad_function_call : : : shared : test_bad_function_call_shared ;
+run test_bad_function_call.cpp throw_bad_function_call : : : static : test_bad_function_call_static ;
diff --git a/test/test_bad_function_call.cpp b/test/test_bad_function_call.cpp
new file mode 100644
index 0000000..3c88dd3
--- /dev/null
+++ b/test/test_bad_function_call.cpp
@@ -0,0 +1,14 @@
+
+// Copyright 2018 Peter Dimov.
+// Distributed under the Boost Software License, Version 1.0.
+
+#include
+#include
+
+void throw_bad_function_call();
+
+int main()
+{
+ BOOST_TEST_THROWS( throw_bad_function_call(), boost::bad_function_call );
+ return boost::report_errors();
+}
diff --git a/test/throw_bad_function_call.cpp b/test/throw_bad_function_call.cpp
new file mode 100644
index 0000000..d603759
--- /dev/null
+++ b/test/throw_bad_function_call.cpp
@@ -0,0 +1,17 @@
+
+// Copyright 2018 Peter Dimov.
+// Distributed under the Boost Software License, Version 1.0.
+
+#include
+#include
+
+#if defined(THROW_BAD_FUNCTION_CALL_DYN_LINK)
+# define EXPORT BOOST_SYMBOL_EXPORT
+#else
+# define EXPORT
+#endif
+
+EXPORT void throw_bad_function_call()
+{
+ throw boost::bad_function_call();
+}