Draft ECMAScript 6 Specification の wiki によると、テンプレートはエスケープ シーケンスを考慮しているため、より複雑です。
テンプレート
quasiTag`literalPortion\0 $x literalPortion1`
脱糖します
// Declaration hoisted to top of module.
// Escape sequences in the hoisted declaration are not decoded according to CV(EscapeSequence).
// The calls to Object.freeze use the original definition of that method.
const unguessableCallSiteId1234 = Object.freeze({
raw: Object.freeze(["literalPortion\\0 ", "literalPortion1"]),
cooked: Object.freeze(["literalPortion\u0000 ", "literalPortion1"])
});
...
// In-situ
// Escape sequences in the arguments are decoded.
// unguessableCallSiteId1234 is ideal as a key into a weak map used to memoize
// extraction of meta-data, custom escaping conventions, and other state
// that can be derived from the literal portions, so does not vary from
// call to call from the same call-site.
quasiTag(unguessableCallSiteId1234, x)
EcmaScript準リテラル - 脱糖
traceurarguments
で見られるように、置換値を含める必要がありますが、リテラル部分はオブジェクトであり、配列ではありません。
traceur でコンパイルされたコードに実装したい場合は、次の最適化されていない例のようにすることができます。
let concatenated = "";
Array.forEach(args[0], (e, i) =>
concatenated += e + ( i < arguments.length - 1 ? arguments[i+1] : "")
);
実際の ECMAScript 6 コードについては、bergi がコメントで提案したように、 Default Quasi Tagの実装をご覧ください。