1212#define O2_FRAMEWORK_EXPRESSIONS_H_
1313
1414#include " Framework/BasicOps.h"
15- #include " Framework/CompilerBuiltins.h"
1615#include " Framework/Pack.h"
1716#include " Framework/Configurable.h"
1817#include " Framework/Variant.h"
1918#include " Framework/InitContext.h"
2019#include " Framework/ConfigParamRegistry.h"
21- #include " Framework/RuntimeError.h"
2220#include < arrow/type_fwd.h>
2321#include < gandiva/gandiva_aliases.h>
2422#include < arrow/type.h>
@@ -143,13 +141,17 @@ struct OpNode {
143141// / A placeholder node for simple type configurable
144142struct PlaceholderNode : LiteralNode {
145143 template <typename T>
144+ requires (variant_trait_v<typename std::decay<T>::type> != VariantType::Unknown)
146145 PlaceholderNode (Configurable<T> const & v) : LiteralNode{v.value }, name{v.name }
147146 {
148- if constexpr (variant_trait_v<typename std::decay<T>::type> != VariantType::Unknown) {
149- retrieve = [](InitContext& context, char const * name) { return LiteralNode::var_t {context.options ().get <T>(name)}; };
150- } else {
151- unknownParameterUsed (name.c_str ());
152- }
147+ retrieve = [](InitContext& context, char const * name) { return LiteralNode::var_t {context.options ().get <T>(name)}; };
148+ }
149+
150+ template <typename T, typename AT>
151+ requires ((std::convertible_to<T, AT>) && (variant_trait_v<typename std::decay<T>::type> != VariantType::Unknown))
152+ PlaceholderNode (Configurable<T> const & v, AT*) : LiteralNode{static_cast <AT>(v.value )}, name{v.name }
153+ {
154+ retrieve = [](InitContext& context, char const * name) { return LiteralNode::var_t {static_cast <AT>(context.options ().get <T>(name))}; };
153155 }
154156
155157 PlaceholderNode (PlaceholderNode const & other) = default ;
@@ -163,6 +165,12 @@ struct PlaceholderNode : LiteralNode {
163165 LiteralNode::var_t (*retrieve)(InitContext&, char const *);
164166};
165167
168+ template <typename AT, typename T>
169+ PlaceholderNode as (Configurable<T> const & v)
170+ {
171+ return PlaceholderNode (v, (AT*)nullptr );
172+ }
173+
166174// / A placeholder node for parameters taken from an array
167175struct ParameterNode : LiteralNode {
168176 ParameterNode (int index_ = -1 )
0 commit comments