diff --git a/src/Bytecode.cc b/src/Bytecode.cc
index 06021a7317f78d48bdfe513f1cc94f1d293aa593..835c99cc30d5dd43c49233f06fa94cc7ef2dc8a7 100644
--- a/src/Bytecode.cc
+++ b/src/Bytecode.cc
@@ -39,24 +39,27 @@ operator<<(BytecodeWriter &code_file, const FCALL_ &instr)
 {
   code_file.instructions_positions.push_back(code_file.tellp());
 
-  code_file.write(reinterpret_cast<const char *>(&instr.op_code), sizeof instr.op_code);
-  code_file.write(reinterpret_cast<const char *>(&instr.nb_output_arguments), sizeof instr.nb_output_arguments);
-  code_file.write(reinterpret_cast<const char *>(&instr.nb_input_arguments), sizeof instr.nb_input_arguments);
-  code_file.write(reinterpret_cast<const char *>(&instr.indx), sizeof instr.indx);
-  code_file.write(reinterpret_cast<const char *>(&instr.add_input_arguments), sizeof instr.add_input_arguments);
-  code_file.write(reinterpret_cast<const char *>(&instr.row), sizeof instr.row);
-  code_file.write(reinterpret_cast<const char *>(&instr.col), sizeof instr.col);
-  code_file.write(reinterpret_cast<const char *>(&instr.call_type), sizeof instr.call_type);
+  auto write_member = [&code_file](const auto &member)
+  {
+    code_file.write(reinterpret_cast<const char *>(&member), sizeof member);
+  };
+
+  write_member(instr.op_code);
+  write_member(instr.nb_output_arguments);
+  write_member(instr.nb_input_arguments);
+  write_member(instr.indx);
+  write_member(instr.add_input_arguments);
+  write_member(instr.row);
+  write_member(instr.col);
+  write_member(instr.call_type);
 
   int size = static_cast<int>(instr.func_name.size());
-  code_file.write(reinterpret_cast<char *>(&size), sizeof size);
-  const char *name = instr.func_name.c_str();
-  code_file.write(name, size);
+  write_member(size);
+  code_file.write(instr.func_name.c_str(), size);
 
   size = static_cast<int>(instr.arg_func_name.size());
-  code_file.write(reinterpret_cast<char *>(&size), sizeof size);
-  name = instr.arg_func_name.c_str();
-  code_file.write(name, size);
+  write_member(size);
+  code_file.write(instr.arg_func_name.c_str(), size);
 
   return code_file;
 }
@@ -67,31 +70,36 @@ operator<<(BytecodeWriter &code_file, const FBEGINBLOCK_ &instr)
 {
   code_file.instructions_positions.push_back(code_file.tellp());
 
-  code_file.write(reinterpret_cast<const char *>(&instr.op_code), sizeof instr.op_code);
-  code_file.write(reinterpret_cast<const char *>(&instr.size), sizeof instr.size);
-  code_file.write(reinterpret_cast<const char *>(&instr.type), sizeof instr.type);
+  auto write_member = [&code_file](const auto &member)
+  {
+    code_file.write(reinterpret_cast<const char *>(&member), sizeof member);
+  };
+
+  write_member(instr.op_code);
+  write_member(instr.size);
+  write_member(instr.type);
   for (int i = 0; i < instr.size; i++)
     {
-      code_file.write(reinterpret_cast<const char *>(&instr.variable[i]), sizeof instr.variable[i]);
-      code_file.write(reinterpret_cast<const char *>(&instr.equation[i]), sizeof instr.equation[i]);
+      write_member(instr.variable[i]);
+      write_member(instr.equation[i]);
     }
   if (instr.type == BlockSimulationType::solveTwoBoundariesSimple
       || instr.type == BlockSimulationType::solveTwoBoundariesComplete
       || instr.type == BlockSimulationType::solveBackwardComplete
       || instr.type == BlockSimulationType::solveForwardComplete)
     {
-      code_file.write(reinterpret_cast<const char *>(&instr.is_linear), sizeof instr.is_linear);
-      code_file.write(reinterpret_cast<const char *>(&instr.endo_nbr), sizeof instr.endo_nbr);
-      code_file.write(reinterpret_cast<const char *>(&instr.u_count_int), sizeof instr.u_count_int);
+      write_member(instr.is_linear);
+      write_member(instr.endo_nbr);
+      write_member(instr.u_count_int);
     }
-  code_file.write(reinterpret_cast<const char *>(&instr.nb_col_jacob), sizeof instr.nb_col_jacob);
-  code_file.write(reinterpret_cast<const char *>(&instr.det_exo_size), sizeof instr.det_exo_size);
-  code_file.write(reinterpret_cast<const char *>(&instr.exo_size), sizeof instr.exo_size);
+  write_member(instr.nb_col_jacob);
+  write_member(instr.det_exo_size);
+  write_member(instr.exo_size);
 
   for (int i{0}; i < instr.det_exo_size; i++)
-    code_file.write(reinterpret_cast<const char *>(&instr.det_exogenous[i]), sizeof instr.det_exogenous[i]);
+    write_member(instr.det_exogenous[i]);
   for (int i{0}; i < instr.exo_size; i++)
-    code_file.write(reinterpret_cast<const char *>(&instr.exogenous[i]), sizeof instr.exogenous[i]);
+    write_member(instr.exogenous[i]);
 
   return code_file;
 }