diff --git a/src/OpenFOAM/fields/Fields/Field/Field.C b/src/OpenFOAM/fields/Fields/Field/Field.C index 59440bc5c6818092aebe102af521e2fd0f3f3880..63ec2a2dda90a73282b8f50c6784b674ce8e3efe 100644 --- a/src/OpenFOAM/fields/Fields/Field/Field.C +++ b/src/OpenFOAM/fields/Fields/Field/Field.C @@ -560,9 +560,9 @@ Foam::Field<Type>::component const direction d ) const { - tmp<Field<cmptType>> Component(new Field<cmptType>(this->size())); - ::Foam::component(Component.ref(), *this, d); - return Component; + auto tres = tmp<Field<cmptType>>::New(this->size()); + ::Foam::component(tres.ref(), *this, d); + return tres; } @@ -618,9 +618,9 @@ VSForm Foam::Field<Type>::block(const label start) const template<class Type> Foam::tmp<Foam::Field<Type>> Foam::Field<Type>::T() const { - tmp<Field<Type>> transpose(new Field<Type>(this->size())); - ::Foam::T(transpose.ref(), *this); - return transpose; + auto tres = tmp<Field<cmptType>>::New(this->size()); + ::Foam::T(tres.ref(), *this); + return tres; } diff --git a/src/OpenFOAM/fields/Fields/Field/FieldFunctions.C b/src/OpenFOAM/fields/Fields/Field/FieldFunctions.C index 65d2406470973edebb3787920e27579e7c5a8888..d36a76d488258206032d2711e76e27df440a37aa 100644 --- a/src/OpenFOAM/fields/Fields/Field/FieldFunctions.C +++ b/src/OpenFOAM/fields/Fields/Field/FieldFunctions.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -83,12 +83,12 @@ pow ) { typedef typename powProduct<Type, r>::type powProductType; - tmp<Field<powProductType>> tRes + auto tres ( - new Field<powProductType>(f.size()) + tmp<Field<powProductType>>::New(f.size()) ); - pow<Type, r>(tRes.ref(), f); - return tRes; + pow<Type, r>(tres.ref(), f); + return tres; } template<class Type, direction r> @@ -100,10 +100,10 @@ pow ) { typedef typename powProduct<Type, r>::type powProductType; - tmp<Field<powProductType>> tRes = reuseTmp<powProductType, Type>::New(tf); - pow<Type, r>(tRes.ref(), tf()); + auto tres = reuseTmp<powProductType, Type>::New(tf); + pow<Type, r>(tres.ref(), tf()); tf.clear(); - return tRes; + return tres; } @@ -123,12 +123,12 @@ tmp<Field<typename outerProduct<Type, Type>::type>> sqr(const UList<Type>& f) { typedef typename outerProduct<Type, Type>::type outerProductType; - tmp<Field<outerProductType>> tRes + auto tres ( - new Field<outerProductType>(f.size()) + tmp<Field<outerProductType>>::New(f.size()) ); - sqr(tRes.ref(), f); - return tRes; + sqr(tres.ref(), f); + return tres; } template<class Type> @@ -136,11 +136,10 @@ tmp<Field<typename outerProduct<Type, Type>::type>> sqr(const tmp<Field<Type>>& tf) { typedef typename outerProduct<Type, Type>::type outerProductType; - tmp<Field<outerProductType>> tRes = - reuseTmp<outerProductType, Type>::New(tf); - sqr(tRes.ref(), tf()); + auto tres = reuseTmp<outerProductType, Type>::New(tf); + sqr(tres.ref(), tf()); tf.clear(); - return tRes; + return tres; } @@ -153,18 +152,18 @@ void magSqr(Field<scalar>& res, const UList<Type>& f) template<class Type> tmp<Field<scalar>> magSqr(const UList<Type>& f) { - tmp<Field<scalar>> tRes(new Field<scalar>(f.size())); - magSqr(tRes.ref(), f); - return tRes; + auto tres = tmp<Field<scalar>>::New(f.size()); + magSqr(tres.ref(), f); + return tres; } template<class Type> tmp<Field<scalar>> magSqr(const tmp<Field<Type>>& tf) { - tmp<Field<scalar>> tRes = reuseTmp<scalar, Type>::New(tf); - magSqr(tRes.ref(), tf()); + auto tres = reuseTmp<scalar, Type>::New(tf); + magSqr(tres.ref(), tf()); tf.clear(); - return tRes; + return tres; } @@ -177,18 +176,18 @@ void mag(Field<scalar>& res, const UList<Type>& f) template<class Type> tmp<Field<scalar>> mag(const UList<Type>& f) { - tmp<Field<scalar>> tRes(new Field<scalar>(f.size())); - mag(tRes.ref(), f); - return tRes; + auto tres = tmp<Field<scalar>>::New(f.size()); + mag(tres.ref(), f); + return tres; } template<class Type> tmp<Field<scalar>> mag(const tmp<Field<Type>>& tf) { - tmp<Field<scalar>> tRes = reuseTmp<scalar, Type>::New(tf); - mag(tRes.ref(), tf()); + auto tres = reuseTmp<scalar, Type>::New(tf); + mag(tres.ref(), tf()); tf.clear(); - return tRes; + return tres; } @@ -203,19 +202,19 @@ template<class Type> tmp<Field<typename Field<Type>::cmptType>> cmptMax(const UList<Type>& f) { typedef typename Field<Type>::cmptType cmptType; - tmp<Field<cmptType>> tRes(new Field<cmptType>(f.size())); - cmptMax(tRes.ref(), f); - return tRes; + auto tres = tmp<Field<cmptType>>::New(f.size()); + cmptMax(tres.ref(), f); + return tres; } template<class Type> tmp<Field<typename Field<Type>::cmptType>> cmptMax(const tmp<Field<Type>>& tf) { typedef typename Field<Type>::cmptType cmptType; - tmp<Field<cmptType>> tRes = reuseTmp<cmptType, Type>::New(tf); - cmptMax(tRes.ref(), tf()); + auto tres = reuseTmp<cmptType, Type>::New(tf); + cmptMax(tres.ref(), tf()); tf.clear(); - return tRes; + return tres; } @@ -230,19 +229,19 @@ template<class Type> tmp<Field<typename Field<Type>::cmptType>> cmptMin(const UList<Type>& f) { typedef typename Field<Type>::cmptType cmptType; - tmp<Field<cmptType>> tRes(new Field<cmptType>(f.size())); - cmptMin(tRes.ref(), f); - return tRes; + auto tres = tmp<Field<cmptType>>::New(f.size()); + cmptMin(tres.ref(), f); + return tres; } template<class Type> tmp<Field<typename Field<Type>::cmptType>> cmptMin(const tmp<Field<Type>>& tf) { typedef typename Field<Type>::cmptType cmptType; - tmp<Field<cmptType>> tRes = reuseTmp<cmptType, Type>::New(tf); - cmptMin(tRes.ref(), tf()); + auto tres = reuseTmp<cmptType, Type>::New(tf); + cmptMin(tres.ref(), tf()); tf.clear(); - return tRes; + return tres; } @@ -257,19 +256,19 @@ template<class Type> tmp<Field<typename Field<Type>::cmptType>> cmptAv(const UList<Type>& f) { typedef typename Field<Type>::cmptType cmptType; - tmp<Field<cmptType>> tRes(new Field<cmptType>(f.size())); - cmptAv(tRes.ref(), f); - return tRes; + auto tres = tmp<Field<cmptType>>::New(f.size()); + cmptAv(tres.ref(), f); + return tres; } template<class Type> tmp<Field<typename Field<Type>::cmptType>> cmptAv(const tmp<Field<Type>>& tf) { typedef typename Field<Type>::cmptType cmptType; - tmp<Field<cmptType>> tRes = reuseTmp<cmptType, Type>::New(tf); - cmptAv(tRes.ref(), tf()); + auto tres = reuseTmp<cmptType, Type>::New(tf); + cmptAv(tres.ref(), tf()); tf.clear(); - return tRes; + return tres; } @@ -282,18 +281,18 @@ void cmptMag(Field<Type>& res, const UList<Type>& f) template<class Type> tmp<Field<Type>> cmptMag(const UList<Type>& f) { - tmp<Field<Type>> tRes(new Field<Type>(f.size())); - cmptMag(tRes.ref(), f); - return tRes; + auto tres = tmp<Field<Type>>::New(f.size()); + cmptMag(tres.ref(), f); + return tres; } template<class Type> tmp<Field<Type>> cmptMag(const tmp<Field<Type>>& tf) { - tmp<Field<Type>> tRes = New(tf); - cmptMag(tRes.ref(), tf()); + auto tres = New(tf); + cmptMag(tres.ref(), tf()); tf.clear(); - return tRes; + return tres; } @@ -652,9 +651,9 @@ tmp<Field<typename product<Type1, Type2>::type>> \ operator Op(const UList<Type1>& f1, const UList<Type2>& f2) \ { \ typedef typename product<Type1, Type2>::type productType; \ - tmp<Field<productType>> tRes(new Field<productType>(f1.size())); \ - OpFunc(tRes.ref(), f1, f2); \ - return tRes; \ + auto tres = tmp<Field<productType>>::New(f1.size()); \ + OpFunc(tres.ref(), f1, f2); \ + return tres; \ } \ \ template<class Type1, class Type2> \ @@ -662,10 +661,10 @@ tmp<Field<typename product<Type1, Type2>::type>> \ operator Op(const UList<Type1>& f1, const tmp<Field<Type2>>& tf2) \ { \ typedef typename product<Type1, Type2>::type productType; \ - tmp<Field<productType>> tRes = reuseTmp<productType, Type2>::New(tf2); \ - OpFunc(tRes.ref(), f1, tf2()); \ + auto tres = reuseTmp<productType, Type2>::New(tf2); \ + OpFunc(tres.ref(), f1, tf2()); \ tf2.clear(); \ - return tRes; \ + return tres; \ } \ \ template<class Type1, class Type2> \ @@ -673,10 +672,10 @@ tmp<Field<typename product<Type1, Type2>::type>> \ operator Op(const tmp<Field<Type1>>& tf1, const UList<Type2>& f2) \ { \ typedef typename product<Type1, Type2>::type productType; \ - tmp<Field<productType>> tRes = reuseTmp<productType, Type1>::New(tf1); \ - OpFunc(tRes.ref(), tf1(), f2); \ + auto tres = reuseTmp<productType, Type1>::New(tf1); \ + OpFunc(tres.ref(), tf1(), f2); \ tf1.clear(); \ - return tRes; \ + return tres; \ } \ \ template<class Type1, class Type2> \ @@ -684,12 +683,11 @@ tmp<Field<typename product<Type1, Type2>::type>> \ operator Op(const tmp<Field<Type1>>& tf1, const tmp<Field<Type2>>& tf2) \ { \ typedef typename product<Type1, Type2>::type productType; \ - tmp<Field<productType>> tRes = \ - reuseTmpTmp<productType, Type1, Type1, Type2>::New(tf1, tf2); \ - OpFunc(tRes.ref(), tf1(), tf2()); \ + auto tres = reuseTmpTmp<productType, Type1, Type1, Type2>::New(tf1, tf2); \ + OpFunc(tres.ref(), tf1(), tf2()); \ tf1.clear(); \ tf2.clear(); \ - return tRes; \ + return tres; \ } \ \ template<class Type, class Form, class Cmpt, direction nCmpt> \ @@ -710,9 +708,9 @@ tmp<Field<typename product<Type, Form>::type>> \ operator Op(const UList<Type>& f1, const VectorSpace<Form,Cmpt,nCmpt>& vs) \ { \ typedef typename product<Type, Form>::type productType; \ - tmp<Field<productType>> tRes(new Field<productType>(f1.size())); \ - OpFunc(tRes.ref(), f1, static_cast<const Form&>(vs)); \ - return tRes; \ + auto tres = tmp<Field<productType>>::New(f1.size()); \ + OpFunc(tres.ref(), f1, static_cast<const Form&>(vs)); \ + return tres; \ } \ \ template<class Type, class Form, class Cmpt, direction nCmpt> \ @@ -724,10 +722,10 @@ operator Op \ ) \ { \ typedef typename product<Type, Form>::type productType; \ - tmp<Field<productType>> tRes = reuseTmp<productType, Type>::New(tf1); \ - OpFunc(tRes.ref(), tf1(), static_cast<const Form&>(vs)); \ + auto tres = reuseTmp<productType, Type>::New(tf1); \ + OpFunc(tres.ref(), tf1(), static_cast<const Form&>(vs)); \ tf1.clear(); \ - return tRes; \ + return tres; \ } \ \ template<class Form, class Cmpt, direction nCmpt, class Type> \ @@ -748,9 +746,9 @@ tmp<Field<typename product<Form, Type>::type>> \ operator Op(const VectorSpace<Form,Cmpt,nCmpt>& vs, const UList<Type>& f1) \ { \ typedef typename product<Form, Type>::type productType; \ - tmp<Field<productType>> tRes(new Field<productType>(f1.size())); \ - OpFunc(tRes.ref(), static_cast<const Form&>(vs), f1); \ - return tRes; \ + auto tres = tmp<Field<productType>>::New(f1.size()); \ + OpFunc(tres.ref(), static_cast<const Form&>(vs), f1); \ + return tres; \ } \ \ template<class Form, class Cmpt, direction nCmpt, class Type> \ @@ -761,10 +759,10 @@ operator Op \ ) \ { \ typedef typename product<Form, Type>::type productType; \ - tmp<Field<productType>> tRes = reuseTmp<productType, Type>::New(tf1); \ - OpFunc(tRes.ref(), static_cast<const Form&>(vs), tf1()); \ + auto tres = reuseTmp<productType, Type>::New(tf1); \ + OpFunc(tres.ref(), static_cast<const Form&>(vs), tf1()); \ tf1.clear(); \ - return tRes; \ + return tres; \ } PRODUCT_OPERATOR(typeOfSum, +, add) diff --git a/src/OpenFOAM/fields/Fields/Field/FieldFunctionsM.C b/src/OpenFOAM/fields/Fields/Field/FieldFunctionsM.C index f286d319f0792eb711d0d2d7f121fc9c080547eb..cd06ceff27c3cfb5200eff35a17e30e8c5f9628e 100644 --- a/src/OpenFOAM/fields/Fields/Field/FieldFunctionsM.C +++ b/src/OpenFOAM/fields/Fields/Field/FieldFunctionsM.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -39,18 +39,18 @@ void Func(Field<ReturnType>& res, const UList<Type>& f) \ TEMPLATE \ tmp<Field<ReturnType>> Func(const UList<Type>& f) \ { \ - tmp<Field<ReturnType>> tRes(new Field<ReturnType>(f.size())); \ - Func(tRes.ref(), f); \ - return tRes; \ + auto tres = tmp<Field<ReturnType>>::New(f.size()); \ + Func(tres.ref(), f); \ + return tres; \ } \ \ TEMPLATE \ tmp<Field<ReturnType>> Func(const tmp<Field<Type>>& tf) \ { \ - tmp<Field<ReturnType>> tRes = reuseTmp<ReturnType, Type>::New(tf); \ - Func(tRes.ref(), tf()); \ + auto tres = reuseTmp<ReturnType, Type>::New(tf); \ + Func(tres.ref(), tf()); \ tf.clear(); \ - return tRes; \ + return tres; \ } @@ -67,18 +67,18 @@ void OpFunc(Field<ReturnType>& res, const UList<Type>& f) \ TEMPLATE \ tmp<Field<ReturnType>> operator Op(const UList<Type>& f) \ { \ - tmp<Field<ReturnType>> tRes(new Field<ReturnType>(f.size())); \ - OpFunc(tRes.ref(), f); \ - return tRes; \ + auto tres = tmp<Field<ReturnType>>::New(f.size()); \ + OpFunc(tres.ref(), f); \ + return tres; \ } \ \ TEMPLATE \ tmp<Field<ReturnType>> operator Op(const tmp<Field<Type>>& tf) \ { \ - tmp<Field<ReturnType>> tRes = reuseTmp<ReturnType, Type>::New(tf); \ - OpFunc(tRes.ref(), tf()); \ + auto tres = reuseTmp<ReturnType, Type>::New(tf); \ + OpFunc(tres.ref(), tf()); \ tf.clear(); \ - return tRes; \ + return tres; \ } @@ -107,9 +107,9 @@ tmp<Field<ReturnType>> Func \ const UList<Type2>& f2 \ ) \ { \ - tmp<Field<ReturnType>> tRes(new Field<ReturnType>(f1.size())); \ - Func(tRes.ref(), f1, f2); \ - return tRes; \ + auto tres = tmp<Field<ReturnType>>::New(f1.size()); \ + Func(tres.ref(), f1, f2); \ + return tres; \ } \ \ TEMPLATE \ @@ -119,10 +119,10 @@ tmp<Field<ReturnType>> Func \ const tmp<Field<Type2>>& tf2 \ ) \ { \ - tmp<Field<ReturnType>> tRes = reuseTmp<ReturnType, Type2>::New(tf2); \ - Func(tRes.ref(), f1, tf2()); \ + auto tres = reuseTmp<ReturnType, Type2>::New(tf2); \ + Func(tres.ref(), f1, tf2()); \ tf2.clear(); \ - return tRes; \ + return tres; \ } \ \ TEMPLATE \ @@ -132,10 +132,10 @@ tmp<Field<ReturnType>> Func \ const UList<Type2>& f2 \ ) \ { \ - tmp<Field<ReturnType>> tRes = reuseTmp<ReturnType, Type1>::New(tf1); \ - Func(tRes.ref(), tf1(), f2); \ + auto tres = reuseTmp<ReturnType, Type1>::New(tf1); \ + Func(tres.ref(), tf1(), f2); \ tf1.clear(); \ - return tRes; \ + return tres; \ } \ \ TEMPLATE \ @@ -145,12 +145,11 @@ tmp<Field<ReturnType>> Func \ const tmp<Field<Type2>>& tf2 \ ) \ { \ - tmp<Field<ReturnType>> tRes = \ - reuseTmpTmp<ReturnType, Type1, Type1, Type2>::New(tf1, tf2); \ - Func(tRes.ref(), tf1(), tf2()); \ + auto tres = reuseTmpTmp<ReturnType, Type1, Type1, Type2>::New(tf1, tf2); \ + Func(tres.ref(), tf1(), tf2()); \ tf1.clear(); \ tf2.clear(); \ - return tRes; \ + return tres; \ } @@ -179,9 +178,9 @@ tmp<Field<ReturnType>> Func \ const UList<Type2>& f2 \ ) \ { \ - tmp<Field<ReturnType>> tRes(new Field<ReturnType>(f2.size())); \ - Func(tRes.ref(), s1, f2); \ - return tRes; \ + auto tres = tmp<Field<ReturnType>>::New(f2.size()); \ + Func(tres.ref(), s1, f2); \ + return tres; \ } \ \ TEMPLATE \ @@ -191,10 +190,10 @@ tmp<Field<ReturnType>> Func \ const tmp<Field<Type2>>& tf2 \ ) \ { \ - tmp<Field<ReturnType>> tRes = reuseTmp<ReturnType, Type2>::New(tf2); \ - Func(tRes.ref(), s1, tf2()); \ + auto tres = reuseTmp<ReturnType, Type2>::New(tf2); \ + Func(tres.ref(), s1, tf2()); \ tf2.clear(); \ - return tRes; \ + return tres; \ } @@ -221,9 +220,9 @@ tmp<Field<ReturnType>> Func \ const Type2& s2 \ ) \ { \ - tmp<Field<ReturnType>> tRes(new Field<ReturnType>(f1.size())); \ - Func(tRes.ref(), f1, s2); \ - return tRes; \ + auto tres = tmp<Field<ReturnType>>::New(f1.size()); \ + Func(tres.ref(), f1, s2); \ + return tres; \ } \ \ TEMPLATE \ @@ -233,10 +232,10 @@ tmp<Field<ReturnType>> Func \ const Type2& s2 \ ) \ { \ - tmp<Field<ReturnType>> tRes = reuseTmp<ReturnType, Type1>::New(tf1); \ - Func(tRes.ref(), tf1(), s2); \ + auto tres = reuseTmp<ReturnType, Type1>::New(tf1); \ + Func(tres.ref(), tf1(), s2); \ tf1.clear(); \ - return tRes; \ + return tres; \ } @@ -267,9 +266,9 @@ tmp<Field<ReturnType>> operator Op \ const UList<Type2>& f2 \ ) \ { \ - tmp<Field<ReturnType>> tRes(new Field<ReturnType>(f1.size())); \ - OpFunc(tRes.ref(), f1, f2); \ - return tRes; \ + auto tres = tmp<Field<ReturnType>>::New(f1.size()); \ + OpFunc(tres.ref(), f1, f2); \ + return tres; \ } \ \ TEMPLATE \ @@ -279,10 +278,10 @@ tmp<Field<ReturnType>> operator Op \ const tmp<Field<Type2>>& tf2 \ ) \ { \ - tmp<Field<ReturnType>> tRes = reuseTmp<ReturnType, Type2>::New(tf2); \ - OpFunc(tRes.ref(), f1, tf2()); \ + auto tres = reuseTmp<ReturnType, Type2>::New(tf2); \ + OpFunc(tres.ref(), f1, tf2()); \ tf2.clear(); \ - return tRes; \ + return tres; \ } \ \ TEMPLATE \ @@ -292,10 +291,10 @@ tmp<Field<ReturnType>> operator Op \ const UList<Type2>& f2 \ ) \ { \ - tmp<Field<ReturnType>> tRes = reuseTmp<ReturnType, Type1>::New(tf1); \ - OpFunc(tRes.ref(), tf1(), f2); \ + auto tres = reuseTmp<ReturnType, Type1>::New(tf1); \ + OpFunc(tres.ref(), tf1(), f2); \ tf1.clear(); \ - return tRes; \ + return tres; \ } \ \ TEMPLATE \ @@ -305,12 +304,11 @@ tmp<Field<ReturnType>> operator Op \ const tmp<Field<Type2>>& tf2 \ ) \ { \ - tmp<Field<ReturnType>> tRes = \ - reuseTmpTmp<ReturnType, Type1, Type1, Type2>::New(tf1, tf2); \ - OpFunc(tRes.ref(), tf1(), tf2()); \ + auto tres = reuseTmpTmp<ReturnType, Type1, Type1, Type2>::New(tf1, tf2); \ + OpFunc(tres.ref(), tf1(), tf2()); \ tf1.clear(); \ tf2.clear(); \ - return tRes; \ + return tres; \ } @@ -336,9 +334,9 @@ tmp<Field<ReturnType>> operator Op \ const UList<Type2>& f2 \ ) \ { \ - tmp<Field<ReturnType>> tRes(new Field<ReturnType>(f2.size())); \ - OpFunc(tRes.ref(), s1, f2); \ - return tRes; \ + auto tres = tmp<Field<ReturnType>>::New(f2.size()); \ + OpFunc(tres.ref(), s1, f2); \ + return tres; \ } \ \ TEMPLATE \ @@ -348,10 +346,10 @@ tmp<Field<ReturnType>> operator Op \ const tmp<Field<Type2>>& tf2 \ ) \ { \ - tmp<Field<ReturnType>> tRes = reuseTmp<ReturnType, Type2>::New(tf2); \ - OpFunc(tRes.ref(), s1, tf2()); \ + auto tres = reuseTmp<ReturnType, Type2>::New(tf2); \ + OpFunc(tres.ref(), s1, tf2()); \ tf2.clear(); \ - return tRes; \ + return tres; \ } @@ -375,9 +373,9 @@ tmp<Field<ReturnType>> operator Op \ const Type2& s2 \ ) \ { \ - tmp<Field<ReturnType>> tRes(new Field<ReturnType>(f1.size())); \ - OpFunc(tRes.ref(), f1, s2); \ - return tRes; \ + auto tres = tmp<Field<ReturnType>>::New(f1.size()); \ + OpFunc(tres.ref(), f1, s2); \ + return tres; \ } \ \ TEMPLATE \ @@ -387,10 +385,10 @@ tmp<Field<ReturnType>> operator Op \ const Type2& s2 \ ) \ { \ - tmp<Field<ReturnType>> tRes = reuseTmp<ReturnType, Type1>::New(tf1); \ - OpFunc(tRes.ref(), tf1(), s2); \ + auto tres = reuseTmp<ReturnType, Type1>::New(tf1); \ + OpFunc(tres.ref(), tf1(), s2); \ tf1.clear(); \ - return tRes; \ + return tres; \ }