From 69332401a6e1167a002a8ed8321428e1ec0ef100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Mon, 28 Mar 2022 16:32:32 +0200 Subject: [PATCH] Forbid dangerous(?) implicit conversion to AggregateDataVariant Previously, std::vector<DataVariant> could be converted automatically to AggregateDataVariant using the move constructor --- .../node_processor/ASTNodeExpressionListProcessor.hpp | 2 +- src/language/node_processor/FunctionProcessor.hpp | 2 +- src/language/utils/BuiltinFunctionEmbedder.hpp | 4 ++-- src/language/utils/DataVariant.hpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/language/node_processor/ASTNodeExpressionListProcessor.hpp b/src/language/node_processor/ASTNodeExpressionListProcessor.hpp index 713eda89a..21823176e 100644 --- a/src/language/node_processor/ASTNodeExpressionListProcessor.hpp +++ b/src/language/node_processor/ASTNodeExpressionListProcessor.hpp @@ -87,7 +87,7 @@ class ASTNodeExpressionListProcessor final : public INodeProcessor } Assert(list_values.size() == m_number_of_values); - return DataVariant{std::move(list_values)}; + return AggregateDataVariant{std::move(list_values)}; } ASTNodeExpressionListProcessor(ASTNode& node) : m_node{node}, m_number_of_values{this->_getNumberOfValues()} {} diff --git a/src/language/node_processor/FunctionProcessor.hpp b/src/language/node_processor/FunctionProcessor.hpp index c6c81d293..16e65e6e1 100644 --- a/src/language/node_processor/FunctionProcessor.hpp +++ b/src/language/node_processor/FunctionProcessor.hpp @@ -124,7 +124,7 @@ class FunctionProcessor : public INodeProcessor for (auto& function_expression_processor : m_function_expression_processors) { list_values.emplace_back(function_expression_processor->execute(context_exec_policy)); } - return DataVariant{std::move(list_values)}; + return AggregateDataVariant{std::move(list_values)}; } } diff --git a/src/language/utils/BuiltinFunctionEmbedder.hpp b/src/language/utils/BuiltinFunctionEmbedder.hpp index 265379a36..ac3ba21fe 100644 --- a/src/language/utils/BuiltinFunctionEmbedder.hpp +++ b/src/language/utils/BuiltinFunctionEmbedder.hpp @@ -204,7 +204,7 @@ class BuiltinFunctionEmbedder<FX(Args...)> : public IBuiltinFunctionEmbedder std::apply([&](auto&&... result) { ((vector_result.emplace_back(_resultToDataVariant(result))), ...); }, tuple_result); - return vector_result; + return AggregateDataVariant{std::move(vector_result)}; } public: @@ -337,7 +337,7 @@ class BuiltinFunctionEmbedder<FX(void)> : public IBuiltinFunctionEmbedder std::apply([&](auto&&... result) { ((vector_result.emplace_back(_resultToDataVariant(result))), ...); }, tuple_result); - return vector_result; + return AggregateDataVariant{std::move(vector_result)}; } public: diff --git a/src/language/utils/DataVariant.hpp b/src/language/utils/DataVariant.hpp index 964044c61..9a09cad6f 100644 --- a/src/language/utils/DataVariant.hpp +++ b/src/language/utils/DataVariant.hpp @@ -97,7 +97,7 @@ class AggregateDataVariant // LCOV_EXCL_LINE AggregateDataVariant& operator=(const AggregateDataVariant&) = default; AggregateDataVariant& operator=(AggregateDataVariant&&) = default; - AggregateDataVariant(std::vector<DataVariant>&& data_vector) : m_data_vector{data_vector} {} + explicit AggregateDataVariant(std::vector<DataVariant>&& data_vector) : m_data_vector{data_vector} {} AggregateDataVariant(const AggregateDataVariant&) = default; AggregateDataVariant(AggregateDataVariant&&) = default; -- GitLab