I have a dumb question about the use of std_move. In 
BlockIO InterpreterInsertQuery::execute(): ln 312

https://github.com/ClickHouse/ClickHouse/blob/8ede5c736a6744f8daa6301d63697b8d4864725d/src/Interpreters/InterpreterInsertQuery.cpp#L310-L313

can this code block just written as 

```cpp
out_wrapper->setProcessListElement(context.getProcessListElement());
out_streams.emplace_back(std::move(out_wrapper););
```
or any specific reason?
{
    if (auto * select_query = select->as<ASTSelectQuery>())
    {
        const auto & tables = select_query->tables();
        if (!tables)
            return false;
        const auto & tables_in_select_query = tables->as<ASTTablesInSelectQuery &>();
        if (tables_in_select_query.children.size() != 1)
            return false;
        const auto & child = tables_in_select_query.children.front();
        const auto & table_element = child->as<ASTTablesInSelectQueryElement &>();
        const auto & table_expr = table_element.table_expression->as<ASTTableExpression &>();
        if (table_expr.subquery)
            return false;
        
        return (!select_query->distinct
            && !select_query->limit_with_ties
            && !select_query->prewhere()
            && !select_query->where()
            && !select_query->groupBy()
            && !select_query->having()
            && !select_query->orderBy()
            && !select_query->limitBy());
    }
    
    return false;
};
BlockIO InterpreterInsertQuery::execute()