diff --git a/test/Jamfile.v2 b/test/Jamfile.v2
index 9c3aff3..25980bb 100644
--- a/test/Jamfile.v2
+++ b/test/Jamfile.v2
@@ -56,5 +56,6 @@ test-suite conversion
[ run lexical_cast_stream_detection_test.cpp ]
[ run lexical_cast_stream_traits_test.cpp ]
[ compile-fail lexical_cast_to_pointer_test.cpp ]
+ [ run lexical_cast_filesystem_test.cpp ../../filesystem/build//boost_filesystem/static ]
;
diff --git a/test/lexical_cast_filesystem_test.cpp b/test/lexical_cast_filesystem_test.cpp
new file mode 100644
index 0000000..154d107
--- /dev/null
+++ b/test/lexical_cast_filesystem_test.cpp
@@ -0,0 +1,46 @@
+// Unit test for boost::lexical_cast.
+//
+// See http://www.boost.org for most recent version, including documentation.
+//
+// Copyright Antony Polukhin, 2013.
+//
+// Distributed under 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).
+//
+// Test lexical_cast usage with long filesystem::path. Bug 7704.
+
+#include
+
+#include
+#include
+#include
+
+using namespace boost;
+
+void test_filesystem();
+
+unit_test::test_suite *init_unit_test_suite(int, char *[])
+{
+ unit_test::test_suite *suite =
+ BOOST_TEST_SUITE("lexical_cast unit test");
+ suite->add(BOOST_TEST_CASE(&test_filesystem));
+
+ return suite;
+}
+
+void test_filesystem()
+{
+ boost::filesystem::path p;
+ std::string s1 = "aaaaaaaaaaaaaaaaaaaaaaa";
+ p = boost::lexical_cast(s1);
+ BOOST_CHECK(!p.empty());
+ BOOST_CHECK_EQUAL(p, s1);
+ p.clear();
+
+ const char ab[] = "aaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";
+ p = boost::lexical_cast(ab);
+ BOOST_CHECK(!p.empty());
+ BOOST_CHECK_EQUAL(p, ab);
+}
+