summaryrefslogtreecommitdiff
path: root/cpp/src/slice2cpp/Gen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/slice2cpp/Gen.cpp')
-rw-r--r--cpp/src/slice2cpp/Gen.cpp19
1 files changed, 13 insertions, 6 deletions
diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp
index c3d994ff1f5..8e598e882a9 100644
--- a/cpp/src/slice2cpp/Gen.cpp
+++ b/cpp/src/slice2cpp/Gen.cpp
@@ -8105,7 +8105,7 @@ Slice::Gen::Cpp11InterfaceVisitor::visitOperation(const OperationPtr& p)
paramsDecl += typeString;
paramsDecl += ' ';
paramsDecl += paramName;
- args += paramName;
+ args += (isMovable(type) && !isOutParam) ? ("::std::move(" + paramName + ")") : paramName;
}
if(!paramList.empty())
@@ -8127,12 +8127,19 @@ Slice::Gen::Cpp11InterfaceVisitor::visitOperation(const OperationPtr& p)
argsAMD += ", ";
}
paramsAMD += inputTypeToString((*q)->type(), (*q)->optional(), (*q)->getMetaData(), _useWstring, true);
- argsAMD += fixKwd(string(paramPrefix) + (*q)->name());
+ if(isMovable((*q)->type()))
+ {
+ argsAMD += "::std::move(" + fixKwd(string(paramPrefix) + (*q)->name()) + ")";
+ }
+ else
+ {
+ argsAMD += fixKwd(string(paramPrefix) + (*q)->name());
+ }
}
if(ret)
{
- string typeString = inputTypeToString(ret, p->returnIsOptional(), p->getMetaData(), _useWstring, true);
+ string typeString = inputTypeToString(ret, p->returnIsOptional(), p->getMetaData(), _useWstring | TypeContextAMD, true);
responseParams = typeString;
responseParamsDecl = typeString + " __ret";
if(!outParams.empty())
@@ -8150,7 +8157,7 @@ Slice::Gen::Cpp11InterfaceVisitor::visitOperation(const OperationPtr& p)
responseParamsDecl += ", ";
}
string paramName = fixKwd(string(paramPrefix) + (*q)->name());
- string typeString = inputTypeToString((*q)->type(), (*q)->optional(), (*q)->getMetaData(), _useWstring, true);
+ string typeString = inputTypeToString((*q)->type(), (*q)->optional(), (*q)->getMetaData(), _useWstring | TypeContextAMD, true);
responseParams += typeString;
responseParamsDecl += typeString + " " + paramName;
}
@@ -8191,7 +8198,7 @@ Slice::Gen::Cpp11InterfaceVisitor::visitOperation(const OperationPtr& p)
H << "," << nl;
}
H << "::std::function<void (" << responseParams << ")>," << nl
- << "::std::function<void (const ::std::exception_ptr&)>, const Ice::Current&)"
+ << "::std::function<void (::std::exception_ptr)>, const Ice::Current&)"
<< (isConst ? " const" : "") << " = 0;";
H.restoreIndent();
}
@@ -8268,7 +8275,7 @@ Slice::Gen::Cpp11InterfaceVisitor::visitOperation(const OperationPtr& p)
else
{
C << nl << "auto inS = ::std::make_shared<::IceInternal::IncomingAsync>(__inS);";
- C << nl << "auto __exception = [inS](const ::std::exception_ptr& e)";
+ C << nl << "auto __exception = [inS](::std::exception_ptr e)";
C << sb;
C << nl << "try";
C << sb;