diff --git a/src/language/utils/IUnaryOperatorProcessorBuilder.hpp b/src/language/utils/IUnaryOperatorProcessorBuilder.hpp
index 19b36e2feb42b9efc558ff5e554532c0f3d32824..6868036e88ce63addcce46f16b1639af96fd21b0 100644
--- a/src/language/utils/IUnaryOperatorProcessorBuilder.hpp
+++ b/src/language/utils/IUnaryOperatorProcessorBuilder.hpp
@@ -13,6 +13,7 @@ class IUnaryOperatorProcessorBuilder
  public:
   [[nodiscard]] virtual std::unique_ptr<INodeProcessor> getNodeProcessor(ASTNode& node) const = 0;
 
+  [[nodiscard]] virtual ASTNodeDataType getOperandDataType() const = 0;
   [[nodiscard]] virtual ASTNodeDataType getReturnValueType() const = 0;
 
   virtual ~IUnaryOperatorProcessorBuilder() = default;
diff --git a/src/language/utils/OperatorRepository.hpp b/src/language/utils/OperatorRepository.hpp
index cf4b322e7f9da12311a0e1b1dcd47ee0c25e7936..4ce6ee83c7652a7e3cd93f5658b716a10b4e4b15 100644
--- a/src/language/utils/OperatorRepository.hpp
+++ b/src/language/utils/OperatorRepository.hpp
@@ -68,10 +68,11 @@ class OperatorRepository
     const std::string binary_operator_type_name =
       binaryOperatorMangler<BinaryOperatorTypeT>(processor_builder->getDataTypeOfA(),
                                                  processor_builder->getDataTypeOfB());
-    if (not m_binary_operator_builder_list
-              .try_emplace(binary_operator_type_name,
-                           Descriptor{processor_builder->getReturnValueType(), processor_builder})
-              .second) {
+    if (auto [i_descriptor, success] =
+          m_binary_operator_builder_list.try_emplace(binary_operator_type_name,
+                                                     Descriptor{processor_builder->getReturnValueType(),
+                                                                processor_builder});
+        not success) {
       // LCOV_EXCL_START
       throw UnexpectedError(binary_operator_type_name + " has already an entry");
       // LCOV_EXCL_STOP
@@ -85,10 +86,11 @@ class OperatorRepository
                  const std::shared_ptr<const IAffectationProcessorBuilder>& processor_builder)
   {
     const std::string affectation_type_name = affectationMangler<OperatorTypeT>(lhs_type, rhs_type);
-    if (not m_affectation_builder_list
-              .try_emplace(affectation_type_name,
-                           Descriptor{ASTNodeDataType::build<ASTNodeDataType::void_t>(), processor_builder})
-              .second) {
+    if (auto [i_descriptor, success] =
+          m_affectation_builder_list.try_emplace(affectation_type_name,
+                                                 Descriptor{ASTNodeDataType::build<ASTNodeDataType::void_t>(),
+                                                            processor_builder});
+        not success) {
       // LCOV_EXCL_START
       throw UnexpectedError(affectation_type_name + " has already an entry");
       // LCOV_EXCL_STOP
@@ -114,10 +116,10 @@ class OperatorRepository
 
   template <typename OperatorTypeT>
   void
-  addUnaryOperator(const ASTNodeDataType& operand_type,
-                   const std::shared_ptr<const IUnaryOperatorProcessorBuilder>& processor_builder)
+  addUnaryOperator(const std::shared_ptr<const IUnaryOperatorProcessorBuilder>& processor_builder)
   {
-    const std::string unary_operator_type_name = unaryOperatorMangler<OperatorTypeT>(operand_type);
+    const std::string unary_operator_type_name =
+      unaryOperatorMangler<OperatorTypeT>(processor_builder->getOperandDataType());
     if (auto [i_descriptor, success] =
           m_unary_operator_builder_list.try_emplace(unary_operator_type_name,
                                                     Descriptor{processor_builder->getReturnValueType(),
diff --git a/src/language/utils/UnaryOperatorProcessorBuilder.hpp b/src/language/utils/UnaryOperatorProcessorBuilder.hpp
index d99d2e17536de2b31a3ac2c48f39800a2461f17d..8dd4b283cf3c628db8cb98aba6b36147990c279d 100644
--- a/src/language/utils/UnaryOperatorProcessorBuilder.hpp
+++ b/src/language/utils/UnaryOperatorProcessorBuilder.hpp
@@ -15,6 +15,12 @@ class UnaryOperatorProcessorBuilder final : public IUnaryOperatorProcessorBuilde
  public:
   UnaryOperatorProcessorBuilder() = default;
 
+  ASTNodeDataType
+  getOperandDataType() const
+  {
+    return ast_node_data_type_from<DataT>;
+  }
+
   ASTNodeDataType
   getReturnValueType() const
   {
diff --git a/src/language/utils/UnaryOperatorRegisterForB.cpp b/src/language/utils/UnaryOperatorRegisterForB.cpp
index 33173e82b896e8d013f125a3b47ce42682ac132d..9eabfbe255691c7cbe2601cfd86a7ef9d449e87d 100644
--- a/src/language/utils/UnaryOperatorRegisterForB.cpp
+++ b/src/language/utils/UnaryOperatorRegisterForB.cpp
@@ -8,10 +8,8 @@ UnaryOperatorRegisterForB::_register_unary_minus()
 {
   OperatorRepository& repository = OperatorRepository::instance();
 
-  auto B = ASTNodeDataType::build<ASTNodeDataType::bool_t>();
-
-  repository.addUnaryOperator<
-    language::unary_minus>(B, std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, int64_t, bool>>());
+  repository.addUnaryOperator<language::unary_minus>(
+    std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, int64_t, bool>>());
 }
 
 void
@@ -19,10 +17,8 @@ UnaryOperatorRegisterForB::_register_unary_not()
 {
   OperatorRepository& repository = OperatorRepository::instance();
 
-  auto B = ASTNodeDataType::build<ASTNodeDataType::bool_t>();
-
-  repository.addUnaryOperator<
-    language::unary_not>(B, std::make_shared<UnaryOperatorProcessorBuilder<language::unary_not, bool, bool>>());
+  repository.addUnaryOperator<language::unary_not>(
+    std::make_shared<UnaryOperatorProcessorBuilder<language::unary_not, bool, bool>>());
 }
 
 UnaryOperatorRegisterForB::UnaryOperatorRegisterForB()
diff --git a/src/language/utils/UnaryOperatorRegisterForN.cpp b/src/language/utils/UnaryOperatorRegisterForN.cpp
index baed0e43eef169229cfbff58fb0592f894b83163..26af42be06cbf05ac070bc563af02a821dd526fa 100644
--- a/src/language/utils/UnaryOperatorRegisterForN.cpp
+++ b/src/language/utils/UnaryOperatorRegisterForN.cpp
@@ -8,11 +8,8 @@ UnaryOperatorRegisterForN::_register_unary_minus()
 {
   OperatorRepository& repository = OperatorRepository::instance();
 
-  auto N = ASTNodeDataType::build<ASTNodeDataType::unsigned_int_t>();
-
-  repository.addUnaryOperator<
-    language::unary_minus>(N,
-                           std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, int64_t, uint64_t>>());
+  repository.addUnaryOperator<language::unary_minus>(
+    std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, int64_t, uint64_t>>());
 }
 
 UnaryOperatorRegisterForN::UnaryOperatorRegisterForN()
diff --git a/src/language/utils/UnaryOperatorRegisterForR.cpp b/src/language/utils/UnaryOperatorRegisterForR.cpp
index c0c60a31f5f6c222232999c3b392a18f30a767c1..cc1f637fa839d54cf8a8b612f7abe9147f79b61c 100644
--- a/src/language/utils/UnaryOperatorRegisterForR.cpp
+++ b/src/language/utils/UnaryOperatorRegisterForR.cpp
@@ -8,10 +8,8 @@ UnaryOperatorRegisterForR::_register_unary_minus()
 {
   OperatorRepository& repository = OperatorRepository::instance();
 
-  auto R = ASTNodeDataType::build<ASTNodeDataType::double_t>();
-
-  repository.addUnaryOperator<
-    language::unary_minus>(R, std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, double, double>>());
+  repository.addUnaryOperator<language::unary_minus>(
+    std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, double, double>>());
 }
 
 UnaryOperatorRegisterForR::UnaryOperatorRegisterForR()
diff --git a/src/language/utils/UnaryOperatorRegisterForRn.cpp b/src/language/utils/UnaryOperatorRegisterForRn.cpp
index 85cc03fa476a34a6bec65f2c7f88f1d76fbad809..a35b92d8a2e53d5850c18aa4e4891a1d4c27f822 100644
--- a/src/language/utils/UnaryOperatorRegisterForRn.cpp
+++ b/src/language/utils/UnaryOperatorRegisterForRn.cpp
@@ -9,12 +9,9 @@ UnaryOperatorRegisterForRn<Dimension>::_register_unary_minus()
 {
   OperatorRepository& repository = OperatorRepository::instance();
 
-  auto Rn = ASTNodeDataType::build<ASTNodeDataType::vector_t>(Dimension);
-
-  repository
-    .addUnaryOperator<language::unary_minus>(Rn,
-                                             std::make_shared<UnaryOperatorProcessorBuilder<
-                                               language::unary_minus, TinyVector<Dimension>, TinyVector<Dimension>>>());
+  repository.addUnaryOperator<language::unary_minus>(
+    std::make_shared<
+      UnaryOperatorProcessorBuilder<language::unary_minus, TinyVector<Dimension>, TinyVector<Dimension>>>());
 }
 
 template <size_t Dimension>
diff --git a/src/language/utils/UnaryOperatorRegisterForRnxn.cpp b/src/language/utils/UnaryOperatorRegisterForRnxn.cpp
index 798a60086b30d008901f0d9b5fa2502e745d6fe9..01a53c096b8bc13481deb774fefa1d34b343338a 100644
--- a/src/language/utils/UnaryOperatorRegisterForRnxn.cpp
+++ b/src/language/utils/UnaryOperatorRegisterForRnxn.cpp
@@ -9,12 +9,9 @@ UnaryOperatorRegisterForRnxn<Dimension>::_register_unary_minus()
 {
   OperatorRepository& repository = OperatorRepository::instance();
 
-  auto Rnxn = ASTNodeDataType::build<ASTNodeDataType::matrix_t>(Dimension, Dimension);
-
-  repository
-    .addUnaryOperator<language::unary_minus>(Rnxn,
-                                             std::make_shared<UnaryOperatorProcessorBuilder<
-                                               language::unary_minus, TinyMatrix<Dimension>, TinyMatrix<Dimension>>>());
+  repository.addUnaryOperator<language::unary_minus>(
+    std::make_shared<
+      UnaryOperatorProcessorBuilder<language::unary_minus, TinyMatrix<Dimension>, TinyMatrix<Dimension>>>());
 }
 
 template <size_t Dimension>
diff --git a/src/language/utils/UnaryOperatorRegisterForZ.cpp b/src/language/utils/UnaryOperatorRegisterForZ.cpp
index 89e0b4972a0a1e2a2556d2210ab4658b35f7b976..5326157d43d621b30a238a758fe4a1feb0308204 100644
--- a/src/language/utils/UnaryOperatorRegisterForZ.cpp
+++ b/src/language/utils/UnaryOperatorRegisterForZ.cpp
@@ -8,11 +8,8 @@ UnaryOperatorRegisterForZ::_register_unary_minus()
 {
   OperatorRepository& repository = OperatorRepository::instance();
 
-  auto Z = ASTNodeDataType::build<ASTNodeDataType::int_t>();
-
-  repository.addUnaryOperator<
-    language::unary_minus>(Z,
-                           std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, int64_t, int64_t>>());
+  repository.addUnaryOperator<language::unary_minus>(
+    std::make_shared<UnaryOperatorProcessorBuilder<language::unary_minus, int64_t, int64_t>>());
 }
 
 UnaryOperatorRegisterForZ::UnaryOperatorRegisterForZ()