C++ Mathematical Expression Library (ExprTk)  http://www.partow.net/programming/exprtk/index.html
diff --git a/exprtk.hpp b/exprtk.hpp
index 94daddd..fc4b057 100644
--- a/exprtk.hpp
+++ b/exprtk.hpp
@@ -6470,7 +6470,7 @@
 
          inline T value() const
          {
-           return *(vector_base_ + static_cast<std::size_t>(details::numeric::to_int64(index_->value())));
+            return *(vector_base_ + static_cast<std::size_t>(details::numeric::to_int64(index_->value())));
          }
 
          inline T& ref()
@@ -10505,17 +10505,6 @@
                   ts.data = &var->ref();
                   ts.type = type_store_t::e_scalar;
                }
-               else if (is_vector_elem_node(arg_list_[i]))
-               {
-                  vector_elem_node_ptr_t var = vector_elem_node_ptr_t(0);
-
-                  if (0 == (var = dynamic_cast<vector_elem_node_ptr_t>(arg_list_[i])))
-                     return false;
-
-                  ts.size = 1;
-                  ts.data = reinterpret_cast<void*>(&var->ref());
-                  ts.type = type_store_t::e_scalar;
-               }
                else
                {
                   ts.size = 1;
@@ -22276,6 +22265,7 @@
          scoped_vec_delete<expression_node_t> svd(*this,vec_initilizer_list);
 
          bool single_value_initialiser = false;
+         bool vec_to_vec_initialiser   = false;
 
          if (!token_is(token_t::e_rsqrbracket))
          {
@@ -22327,12 +22317,44 @@
             }
             else if (!token_is(token_t::e_lcrlbracket))
             {
-               set_error(
-                  make_error(parser_error::e_syntax,
-                             current_token(),
-                             "ERR140 - Expected '{' as part of vector initialiser list"));
+               expression_node_ptr initialiser = error_node();
 
-               return error_node();
+               // Is this a vector to vector assignment and initialisation?
+               if (token_t::e_symbol == current_token().type)
+               {
+                  // Is it a locally defined vector?
+                  scope_element& se = sem_.get_active_element(current_token().value);
+
+                  if (scope_element::e_vector == se.type)
+                  {
+                     if ((initialiser = parse_expression()))
+                        vec_initilizer_list.push_back(initialiser);
+                     else
+                        return error_node();
+                  }
+                  // Are we dealing with a user defined vector?
+                  else if (symtab_store_.is_vector(current_token().value))
+                  {
+                     lodge_symbol(current_token().value,e_st_vector);
+
+                     if ((initialiser = parse_expression()))
+                        vec_initilizer_list.push_back(initialiser);
+                     else
+                        return error_node();
+                  }
+               }
+
+               if (0 == initialiser)
+               {
+                  set_error(
+                     make_error(parser_error::e_syntax,
+                                current_token(),
+                                "ERR140 - Expected '{' as part of vector initialiser list"));
+
+                  return error_node();
+               }
+               else
+                  vec_to_vec_initialiser = true;
             }
             else if (!token_is(token_t::e_rcrlbracket))
             {
@@ -22464,13 +22486,20 @@
 
          lodge_symbol(vec_name,e_st_local_vector);
 
-         expression_node_ptr result =
-                node_allocator_
-                   .allocate<details::vector_assignment_node<T> >(
-                      (*vec_holder)[0],
-                      vec_size,
-                      vec_initilizer_list,
-                      single_value_initialiser);
+         expression_node_ptr result = error_node();
+
+         if (vec_to_vec_initialiser)
+            result = expression_generator_(
+                        details::e_assign,
+                        node_allocator_.allocate<vector_node_t>(vec_holder),
+                        vec_initilizer_list[0]);
+         else
+            result = node_allocator_
+                        .allocate<details::vector_assignment_node<T> >(
+                           (*vec_holder)[0],
+                           vec_size,
+                           vec_initilizer_list,
+                           single_value_initialiser);
 
          svd.delete_ptr = (0 == result);
 
@@ -23386,7 +23415,7 @@
             }
          }
 
-         // Are we dealing with a vector element?
+         // Are we dealing with a vector?
          if (symtab_store_.is_vector(symbol))
          {
             lodge_symbol(symbol,e_st_vector);
diff --git a/readme.txt b/readme.txt
index 4e3ba87..d5a9627 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1166,10 +1166,18 @@
    (e) Initialise the first three (all) values
        var x[3] := { 1, 2, 3 };
 
-   (f) Error as there are too many initialisers
+   (f) Initialise vector from a vector
+       var x[4] := { 1, 2, 3, 4 };
+       var y[3] := x;
+
+   (g) Initialise vector from a smaller vector
+       var x[3] := { 1, 2, 3 };
+       var y[5] := x;   // 1, 2, 3, ??, ??
+
+   (h) Error as there are too many initialisers
        var x[3] := { 1, 2, 3, 4 };
 
-   (g) Error as a vector of size zero is not allowed.
+   (i) Error as a vector of size zero is not allowed.
        var x[0];