code: function (oInterface, oPathValue) {
  			var bExpression = oPathValue.asExpression,
  				aParts = [],
  				oResult,
  				aResults = [];
  
  			// needed so that we can safely call the forEach
  			Basics.expectType(oPathValue, "array");
  			oPathValue.value.forEach(function (oUnused, i) {
  				// an embedded concat must use expression binding
  				oResult = Expression.parameter(oInterface, oPathValue, i);
  				// if any parameter is type expression, the concat must become expression, too
  				bExpression = bExpression || oResult.result === "expression";
  				aResults.push(oResult);
  			});
  			// convert the results to strings after we know whether the result is expression
  			aResults.forEach(function (oResult) {
  				if (bExpression) {
  					// the expression might have a lower operator precedence than '+'
  					Expression.wrapExpression(oResult);
  				}
  				if (oResult.type !== 'edm:Null') {
  					// ignore null (otherwise the string 'null' would appear in expressions)
  					aParts.push(Basics.resultToString(oResult, bExpression, oPathValue.withType));
  				}
  			});
  			oResult = bExpression
  				? {result : "expression", value : aParts.join("+")}
  				: {result : "composite", value : aParts.join("")};
  			oResult.type = "Edm.String";
  			return oResult;
  		}
docs: Handling of "14.5.3.1.1 Function odata.concat".
  
  @param {sap.ui.core.util.XMLPreprocessor.IContext|sap.ui.model.Context} oInterface
  the callback interface related to the current formatter call
  @param {object} oPathValue
  path and value information pointing to the parameters array (see Expression object)
  @returns {object}
  the result object