C++ Mathematical Expression Library (ExprTk)  http://www.partow.net/programming/exprtk/index.html
diff --git a/exprtk.hpp b/exprtk.hpp
index 9cd92ff..6bab715 100644
--- a/exprtk.hpp
+++ b/exprtk.hpp
@@ -14468,7 +14468,7 @@
          freefunc6(ff6_functor ff) : exprtk::ifunction<T>(6), f(ff) {}
          inline T operator()(const T& v0, const T& v1, const T& v2, const T& v3, const T& v4, const T& v5)
          { return f(v0,v1,v2,v3,v4,v5); }
-         ff5_functor f;
+         ff6_functor f;
       };
 
       template <typename Type, typename RawType>
@@ -14953,19 +14953,22 @@
 
       inline symbol_table<T>& operator=(const symbol_table<T>& st)
       {
-         if (holder_)
+         if (this != &st)
          {
-            if (0 == --holder_->ref_count)
+            if (holder_)
             {
-               delete holder_;
+               if (0 == --holder_->ref_count)
+               {
+                  delete holder_;
+               }
+
+               holder_ = 0;
             }
 
-            holder_ = 0;
+            holder_ = st.holder_;
+            holder_->ref_count++;
          }
 
-         holder_ = st.holder_;
-         holder_->ref_count++;
-
          return *this;
       }
 
diff --git a/exprtk_test.cpp b/exprtk_test.cpp
index df5c98c..4743bcd 100644
--- a/exprtk_test.cpp
+++ b/exprtk_test.cpp
@@ -3139,6 +3139,7 @@
 double foo3(double v0, double v1, double v2) { return v0 + v1 + v2; }
 double foo4(double v0, double v1, double v2, double v3) { return v0 + v1 + v2 + v3; }
 double foo5(double v0, double v1, double v2, double v3, double v4) { return v0 + v1 + v2 + v3 + v4; }
+double foo6(double v0, double v1, double v2, double v3, double v4, double v5) { return v0 + v1 + v2 + v3 + v4 + v5; }
 
 template <typename T>
 inline bool run_test09()
@@ -3241,11 +3242,12 @@
 
       const std::string expression_list[] =
                            {
-                             "foo1(1)         == 1",
-                             "foo2(1,2)       == (1 + 2)",
-                             "foo3(1,2,3)     == (1 + 2 + 3)",
-                             "foo4(1,2,3,4)   == (1 + 2 + 3 + 4)",
-                             "foo5(1,2,3,4,5) == (1 + 2 + 3 + 4 + 5)"
+                             "foo1(1)           == 1",
+                             "foo2(1,2)         == (1 + 2)",
+                             "foo3(1,2,3)       == (1 + 2 + 3)",
+                             "foo4(1,2,3,4)     == (1 + 2 + 3 + 4)",
+                             "foo5(1,2,3,4,5)   == (1 + 2 + 3 + 4 + 5)",
+                             "foo6(1,2,3,4,5,6) == (1 + 2 + 3 + 4 + 5 + 6)"
                            };
 
       const std::size_t expression_list_size = sizeof(expression_list) / sizeof(std::string);
@@ -3257,6 +3259,7 @@
       symbol_table.add_function("foo3",foo3);
       symbol_table.add_function("foo4",foo4);
       symbol_table.add_function("foo5",foo5);
+      symbol_table.add_function("foo6",foo6);
 
       for (std::size_t i = 0; i < expression_list_size; ++i)
       {
diff --git a/readme.txt b/readme.txt
index 24f542b..88e180a 100644
--- a/readme.txt
+++ b/readme.txt
@@ -881,7 +881,7 @@
   Expressions        |                          |   Expressions as
   in string form     A                          V   exprtk::expression
                      |                          |   instances
-  [s0:'x+1'     ]-+  |                          |   +-[e0: x+1]
+  [s0:'x+1']------+  |                          |   +-[e0: x+1]
                   |  |                          |   |
   [s1:'2z+y']-----+--+                          +-->+-[e1: 2z+y]
                   |                                 |