diff --git a/notebooks/04_Classes+Objects.ipynb b/notebooks/04_Classes+Objects.ipynb
index e6f23b376be17c47d3f926bb2f4ed745ef9c7060..4750860a9e7c3f3bc154a5e306d863767ec89743 100644
--- a/notebooks/04_Classes+Objects.ipynb
+++ b/notebooks/04_Classes+Objects.ipynb
@@ -86,7 +86,7 @@
     "  - make sure that the internal implementation of the class can be changed without breaking outside code  \n",
     "\n",
     "In C++ we have three levels of access:\n",
-    "  - **public** = any one has access \n",
+    "  - **public** = anyone has access \n",
     "  - **private** = only the class itself has access\n",
     "  - **protected** = the class and its children have access\n",
     "  \n",
@@ -222,7 +222,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 5,
    "id": "4c961b3c-ba83-46e6-aab1-08f1ad4102e3",
    "metadata": {},
    "outputs": [],
@@ -244,7 +244,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 6,
    "id": "f501dce2-ef23-4345-8072-45ea85cb8c17",
    "metadata": {},
    "outputs": [
@@ -275,7 +275,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 7,
    "id": "3f4cf1f6-8c50-4057-ab71-259c1046222a",
    "metadata": {},
    "outputs": [],
@@ -300,7 +300,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 8,
    "id": "51015ed7-9f4e-40c0-bfa9-2b9f98cd0e1e",
    "metadata": {},
    "outputs": [
@@ -340,7 +340,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 9,
    "id": "8eed6ec9-9ad6-48ab-b0e2-ab0ea35b9b57",
    "metadata": {},
    "outputs": [],
@@ -373,7 +373,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": 10,
    "id": "e456ce69-71e5-4169-b3e8-f302c3f72242",
    "metadata": {},
    "outputs": [],
@@ -397,7 +397,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 11,
    "id": "8fe56e9c-1842-4c29-84eb-1b20b3f7704a",
    "metadata": {},
    "outputs": [
@@ -445,7 +445,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 18,
    "id": "f33e5eef-b396-4bfc-8031-f21b33839611",
    "metadata": {},
    "outputs": [],
@@ -465,7 +465,7 @@
     "        VectorClass( unsigned int dim ) : dim_(dim) {\n",
     "            \n",
     "            // don't allow vectors with zero dimension\n",
-    "            assert( !dim_ == 0 );\n",
+    "            assert( dim_ != 0 );\n",
     "\n",
     "            // allocate memory (will throw an exception, if it fails)\n",
     "            vec_ = new double[ dim_ ];\n",
@@ -485,9 +485,18 @@
     "};"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "id": "62dc84f5-ddf8-45e9-af3a-d9574ff75026",
+   "metadata": {},
+   "source": [
+    "#### Remark\n",
+    "Decorating member variables with a trailing underscore is one of several ways commonly used mark them as such. This e.g. allows to quickly distinguish them from local variables inside member functions. This is, however, not required by the language itself."
+   ]
+  },
   {
    "cell_type": "code",
-   "execution_count": 15,
+   "execution_count": 19,
    "id": "e2f2ac16-a0df-4f6c-816a-cb47420f4989",
    "metadata": {},
    "outputs": [],
@@ -499,7 +508,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 20,
    "id": "7c06f924-8412-449c-a5b5-a56b1df2ff2b",
    "metadata": {},
    "outputs": [
@@ -525,7 +534,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 21,
    "id": "102897af-957e-43b7-a959-eb6ee468f35d",
    "metadata": {},
    "outputs": [],
@@ -576,7 +585,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 22,
    "id": "adcac578-0bca-4aed-8d13-4514826dd0e7",
    "metadata": {},
    "outputs": [
@@ -602,7 +611,7 @@
    "id": "1a74105b-5453-49ab-aeed-e0371809fc52",
    "metadata": {},
    "source": [
-    "Our VectorClass is currently pretty useless, since we cannot manipulate the values of the vector entries. Making vec_ public would break encapsulation. Instead let's\n",
+    "Our VectorClass currently is pretty useless, since we cannot manipulate the values of the vector entries. Making vec_ public would break encapsulation. Instead let's\n",
     "- overload the [ ] for providing one-based access\n",
     "- add a getter method for the dimension\n",
     "- add a member function to pretty-print the vector's entries"
@@ -610,7 +619,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 23,
    "id": "a32eb08a-822a-4b83-b3d0-6de281acffba",
    "metadata": {},
    "outputs": [],
@@ -676,7 +685,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 27,
+   "execution_count": 24,
    "id": "4eb50e73-21f5-4669-9464-32f11d958732",
    "metadata": {},
    "outputs": [
@@ -723,7 +732,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 31,
+   "execution_count": 28,
    "id": "cdfde2f9-fafc-4a9f-99b7-4952720e4521",
    "metadata": {},
    "outputs": [
@@ -795,13 +804,15 @@
     "            // leave that to students\n",
     "        }\n",
     "    \n",
-    "        // add two vectors together (that's actually a little bit tricky, due to the question \"where to put the result?\"\n",
-    "        // for the moment leave it with adding another vector to the one on which the method is called;\n",
+    "        // add two vectors together (that's actually a little bit tricky, due to the question \"where to\n",
+    "        // put the result?\". For the moment leave it with adding another vector to the one on which the\n",
+    "        // method is called;\n",
     "        // let us try the following, and determine, why it will fail ;-)\n",
     "        void add( VectorClass other ) {\n",
     "\n",
     "            // make sure that input vector has correct length\n",
     "            assert( other.getDim() == dim_ );\n",
+    "            \n",
     "            for( unsigned int k = 0; k < dim_; k++ ) {\n",
     "                vec_[k] += other[k+1];\n",
     "            }\n",
@@ -843,7 +854,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 32,
+   "execution_count": 29,
    "id": "f9331dc3-19ff-44a2-a8f5-6e258f9266d2",
    "metadata": {},
    "outputs": [],
@@ -853,7 +864,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 33,
+   "execution_count": 30,
    "id": "4f4d196d-761d-40e1-9d08-5df87307476b",
    "metadata": {},
    "outputs": [
@@ -957,7 +968,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 34,
+   "execution_count": 32,
    "id": "def80c0f-89b6-4e00-995a-14b8e800975c",
    "metadata": {},
    "outputs": [
@@ -1079,7 +1090,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 35,
+   "execution_count": 33,
    "id": "473de9eb-b04c-4087-8444-8d4b3c4c9fb8",
    "metadata": {},
    "outputs": [
@@ -1088,15 +1099,15 @@
      "output_type": "stream",
      "text": [
       "VectorClass.cpp: In function ‘int main()’:\n",
-      "VectorClass.cpp:102:22: error: use of deleted function ‘VectorClass::VectorClass(VectorClass&)’\n",
-      "     myVec.add( other );\n",
-      "                      ^\n",
+      "VectorClass.cpp:102:14: error: use of deleted function ‘VectorClass::VectorClass(VectorClass&)’\n",
+      "  102 |     myVec.add( other );\n",
+      "      |     ~~~~~~~~~^~~~~~~~~\n",
       "VectorClass.cpp:27:9: note: declared here\n",
-      "         VectorClass( VectorClass &other ) = delete;\n",
-      "         ^~~~~~~~~~~\n",
-      "VectorClass.cpp:64:14: note:   initializing argument 1 of ‘void VectorClass::add(VectorClass)’\n",
-      "         void add( VectorClass other ) {\n",
-      "              ^~~\n"
+      "   27 |         VectorClass( VectorClass &other ) = delete;\n",
+      "      |         ^~~~~~~~~~~\n",
+      "VectorClass.cpp:64:31: note:   initializing argument 1 of ‘void VectorClass::add(VectorClass)’\n",
+      "   64 |         void add( VectorClass other ) {\n",
+      "      |                   ~~~~~~~~~~~~^~~~~\n"
      ]
     }
    ],
@@ -1122,7 +1133,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": 34,
    "id": "30eccd22-8c5e-4062-a1d1-8006981aae99",
    "metadata": {},
    "outputs": [
@@ -1130,13 +1141,13 @@
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "\u001b[1minput_line_8:61:45: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1mno viable overloaded operator[] for type 'const VectorClass'\u001b[0m\n",
+      "\u001b[1minput_line_47:61:45: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1mno viable overloaded operator[] for type 'const VectorClass'\u001b[0m\n",
       "                this->operator[](k) += other[k];\n",
       "\u001b[0;1;32m                                       ~~~~~^~\n",
-      "\u001b[0m\u001b[1minput_line_8:32:17: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function not viable: 'this' argument has type 'const VectorClass', but method is not marked const\u001b[0m\n",
+      "\u001b[0m\u001b[1minput_line_47:32:17: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function not viable: 'this' argument has type 'const VectorClass', but method is not marked const\u001b[0m\n",
       "        double& operator[] ( unsigned int index ){\n",
       "\u001b[0;1;32m                ^\n",
-      "\u001b[0m\u001b[1minput_line_8:71:13: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1mfunction definition is not allowed here\u001b[0m\n",
+      "\u001b[0m\u001b[1minput_line_47:71:13: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1mfunction definition is not allowed here\u001b[0m\n",
       " int main() {\n",
       "\u001b[0;1;32m            ^\n",
       "\u001b[0m"
@@ -1269,7 +1280,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 35,
    "id": "15b02a70-a496-4098-a446-9a60ee30b116",
    "metadata": {},
    "outputs": [
@@ -1277,218 +1288,21 @@
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "\u001b[1minput_line_10:41:23: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1mfunctions that differ only in their return type cannot be overloaded\u001b[0m\n",
+      "\u001b[1minput_line_49:41:23: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1mfunctions that differ only in their return type cannot be overloaded\u001b[0m\n",
       "        const double& operator[] ( unsigned int index ) {\n",
       "\u001b[0;1;32m              ~~~~~~~ ^\n",
-      "\u001b[0m\u001b[1minput_line_10:35:17: \u001b[0m\u001b[0;1;30mnote: \u001b[0mprevious definition is here\u001b[0m\n",
+      "\u001b[0m\u001b[1minput_line_49:35:17: \u001b[0m\u001b[0;1;30mnote: \u001b[0mprevious definition is here\u001b[0m\n",
       "        double& operator[] ( unsigned int index ){\n",
       "\u001b[0;1;32m        ~~~~~~~ ^\n",
-      "\u001b[0m\u001b[1minput_line_10:15:23: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1muse of overloaded operator '<<' is ambiguous (with operand types\n",
-      "      'basic_ostream<char, std::char_traits<char> >' and 'unsigned int')\u001b[0m\n",
-      "                      << dim_ << std::endl;\n",
-      "\u001b[0;1;32m                      ^  ~~~~\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:166:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(long __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:174:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(bool __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:178:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(short __n);\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:181:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(unsigned short __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:189:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(int __n);\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:201:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(long long __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:205:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(unsigned long long __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:224:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(float __f)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:232:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(long double __f)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:517:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<char, _Traits>& __out, char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:511:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _CharT = char, _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:523:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<char, _Traits>& __out, signed char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:528:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1minput_line_10:28:23: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1muse of overloaded operator '<<' is ambiguous (with operand types\n",
-      "      'basic_ostream<char, std::char_traits<char> >' and 'unsigned long')\u001b[0m\n",
-      "                      << dim_ * sizeof(double)\n",
-      "\u001b[0;1;32m                      ^  ~~~~~~~~~~~~~~~~~~~~~\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:166:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(long __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:174:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(bool __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:178:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(short __n);\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:181:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(unsigned short __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:189:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(int __n);\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:201:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(long long __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:205:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(unsigned long long __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:224:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(float __f)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:232:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(long double __f)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:517:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<char, _Traits>& __out, char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:511:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _CharT = char, _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:523:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<char, _Traits>& __out, signed char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:528:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)\n",
-      "\u001b[0;1;32m    ^\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "\u001b[0m\u001b[1minput_line_10:50:20: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1muse of overloaded operator '<<' is ambiguous (with operand types 'std::ostream'\n",
-      "      (aka 'basic_ostream<char>') and 'double')\u001b[0m\n",
-      "                os << vec_[k] << \", \";\n",
-      "\u001b[0;1;32m                ~~ ^  ~~~~~~~\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:166:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(long __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:174:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(bool __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:178:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(short __n);\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:181:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(unsigned short __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:189:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(int __n);\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:201:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(long long __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:205:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(unsigned long long __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:224:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(float __f)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:232:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(long double __f)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:517:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<char, _Traits>& __out, char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:511:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _CharT = char, _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:523:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<char, _Traits>& __out, signed char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:528:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1minput_line_10:52:16: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1muse of overloaded operator '<<' is ambiguous (with operand types 'std::ostream'\n",
-      "      (aka 'basic_ostream<char>') and 'double')\u001b[0m\n",
-      "            os << vec_[dim_-1] << \")\" << std::endl;\n",
-      "\u001b[0;1;32m            ~~ ^  ~~~~~~~~~~~~\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:166:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(long __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:174:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(bool __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:178:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(short __n);\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:181:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(unsigned short __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:189:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(int __n);\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:201:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(long long __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:205:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(unsigned long long __n)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:224:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(float __f)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:232:7: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function\u001b[0m\n",
-      "      operator<<(long double __f)\n",
-      "\u001b[0;1;32m      ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:517:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<char, _Traits>& __out, char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:511:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _CharT = char, _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:523:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<char, _Traits>& __out, signed char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:528:5: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function [with _Traits = std::char_traits<char>]\u001b[0m\n",
-      "    operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)\n",
-      "\u001b[0;1;32m    ^\n",
-      "\u001b[0m\u001b[1minput_line_10:70:45: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1mno viable overloaded operator[] for type 'const VectorClass'\u001b[0m\n",
+      "\u001b[0m\u001b[1minput_line_49:70:45: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1mno viable overloaded operator[] for type 'const VectorClass'\u001b[0m\n",
       "                this->operator[](k) += other[k];\n",
       "\u001b[0;1;32m                                       ~~~~~^~\n",
-      "\u001b[0m\u001b[1minput_line_10:35:17: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function not viable: 'this' argument has type 'const VectorClass', but\n",
-      "      method is not marked const\u001b[0m\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
+      "\u001b[0m\u001b[1minput_line_49:35:17: \u001b[0m\u001b[0;1;30mnote: \u001b[0mcandidate function not viable: 'this' argument has type 'const VectorClass', but method is not marked const\u001b[0m\n",
       "        double& operator[] ( unsigned int index ){\n",
       "\u001b[0;1;32m                ^\n",
-      "\u001b[0m\u001b[1minput_line_10:80:13: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1mfunction definition is not allowed here\u001b[0m\n",
+      "\u001b[0m\u001b[1minput_line_49:80:13: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1mfunction definition is not allowed here\u001b[0m\n",
       " int main() {\n",
       "\u001b[0;1;32m            ^\n",
-      "\u001b[0mIn file included from input_line_5:1:\n",
-      "In file included from /home/mohr/local/miniconda3/envs/cling/include/xeus/xinterpreter.hpp:17:\n",
-      "In file included from /home/mohr/local/miniconda3/envs/cling/include/xeus/xcomm.hpp:19:\n",
-      "In file included from /home/mohr/local/miniconda3/envs/cling/include/nlohmann/json.hpp:42:\n",
-      "In file included from /home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/iterator:64:\n",
-      "\u001b[1m/home/mohr/local/miniconda3/envs/cling/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/../../../../x86_64-conda-linux-gnu/include/c++/9.3.0/ostream:568:8: \u001b[0m\u001b[0;1;31merror: \u001b[0m\u001b[1mno member named 'setstate' in 'std::basic_ostream<char>'\u001b[0m\n",
-      "        __out.setstate(ios_base::badbit);\n",
-      "\u001b[0;1;32m        ~~~~~ ^\n",
-      "\u001b[0m\u001b[1minput_line_10:14:23: \u001b[0m\u001b[0;1;30mnote: \u001b[0min instantiation of function template specialization\n",
-      "      'std::operator<<<std::char_traits<char> >' requested here\u001b[0m\n",
-      "            std::cout << \"An instance of VectorClass was generated. dim_ = \"\n",
-      "\u001b[0;1;32m                      ^\n",
       "\u001b[0m"
      ]
     },
@@ -1633,7 +1447,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": 36,
    "id": "0b2a852d-2a07-4f2a-85d2-7833051474d7",
    "metadata": {},
    "outputs": [],
@@ -1728,7 +1542,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 37,
    "id": "81aeb13c-be8f-4e15-b7d7-acffb4a575eb",
    "metadata": {},
    "outputs": [],
@@ -1759,7 +1573,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 38,
    "id": "77177a38-424a-4558-8836-9c6f95bdd7c0",
    "metadata": {},
    "outputs": [
@@ -1772,9 +1586,9 @@
       "An instance of VectorClass was generated. dim_ = 10\n",
       "(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)\n",
       "(11, 11, 11, 11, 11, 11, 11, 11, 11, 11)\n",
-      "Going to delete memory starting at address 0x561e481ef440\n",
+      "Going to delete memory starting at address 0x5627a2271680\n",
       "An instance of VectorClass was destroyed and 80 bytes freed.\n",
-      "Going to delete memory starting at address 0x561e480f55f0\n",
+      "Going to delete memory starting at address 0x5627a226b850\n",
       "An instance of VectorClass was destroyed and 80 bytes freed.\n"
      ]
     }
@@ -1806,7 +1620,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 39,
    "id": "867de208-5492-44c0-bf04-7ac9f868908f",
    "metadata": {},
    "outputs": [
@@ -1814,7 +1628,7 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Overwriting splitA.hpp\n"
+      "Writing splitA.hpp\n"
      ]
     }
    ],
@@ -1836,7 +1650,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 40,
    "id": "639efb26-6150-4cdf-aef4-b962ba86a6a3",
    "metadata": {},
    "outputs": [
@@ -1844,7 +1658,7 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Overwriting splitA.cpp\n"
+      "Writing splitA.cpp\n"
      ]
     }
    ],
@@ -1862,7 +1676,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 41,
    "id": "3ed47b3b-3b45-4fc3-ab31-655915b41251",
    "metadata": {},
    "outputs": [
@@ -1870,7 +1684,7 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Overwriting splitB.cpp\n"
+      "Writing splitB.cpp\n"
      ]
     }
    ],
@@ -1892,7 +1706,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 42,
    "id": "2c897fb0-b3a2-4617-8b92-79dbaaff6b8b",
    "metadata": {},
    "outputs": [],