diff --git a/src/me.cc b/src/me.cc index 945eb86..68558fb 100644 --- a/src/me.cc +++ b/src/me.cc @@ -544,13 +544,18 @@ namespace ME std::get<0>(itp).linkTo(target); } - template - T callOperation(Operation& op, Tuple& tp, MBases&... secs) + template + auto callOperation(Operation& op, Tuple& tp, MBases&... secs) + -> decltype(callOperation(op, tp, std::get(tp), secs...)) { - return callOperation(op, tp, std::get(tp), secs...); + return callOperation(op, tp, std::get(tp), secs...); } - // spezialization for termination !!! + template + auto callOperation<0>(Operation& op, Tuple& tp, MBases&... secs) -> decltype(op(secs.get()...)) + { + return op(secs.get()...); + } template size_t MultiArrayOperation::argNum() const @@ -568,14 +573,14 @@ namespace ME template T& MultiArrayOperation::get() { - mVal = mOp(); + mVal = callOperation(mOp, mSecs); return mVal; } template const T& MultiArrayOperation::get() const { - mVal = mOp() + mVal = callOperation(mOp, mSecs); return mVal; }