[boost-doc-zh] r351 committed - 升级至1.41.0,第三批,libs/目录下m-r子目录

  • From: boost-doc-zh@xxxxxxxxxxxxxx
  • To: boost-doc-zh-notify@xxxxxxxxxxxxx
  • Date: Mon, 30 Nov 2009 13:59:14 +0000

Revision: 351
Author: alai04
Date: Mon Nov 30 05:58:26 2009
Log: 升级至1.41.0,第三批,libs/目录下m-r子目录
http://code.google.com/p/boost-doc-zh/source/detail?r=351

Added:
 /trunk/libs/numeric/ublas/doc/js
 /trunk/libs/numeric/ublas/doc/js/jquery-1.3.2.min.js
 /trunk/libs/numeric/ublas/doc/js/jquery.toc-gw.js
 /trunk/libs/numeric/ublas/doc/options.htm
 /trunk/libs/numeric/ublas/doc/release_notes.htm
 /trunk/libs/proto/doc
 /trunk/libs/proto/doc/reference
 /trunk/libs/proto/doc/reference/args.xml
 /trunk/libs/proto/doc/reference/concepts
 /trunk/libs/proto/doc/reference/concepts/BasicPrimitiveTransform.xml
 /trunk/libs/proto/doc/reference/concepts/CallableTransform.xml
 /trunk/libs/proto/doc/reference/concepts/ObjectTransform.xml
 /trunk/libs/proto/doc/reference/concepts/PolymorphicFunctionObject.xml
 /trunk/libs/proto/doc/reference/concepts/PrimitiveTransform.xml
 /trunk/libs/proto/doc/reference/concepts/Transform.xml
 /trunk/libs/proto/doc/reference/context
 /trunk/libs/proto/doc/reference/context/callable.xml
 /trunk/libs/proto/doc/reference/context/default.xml
 /trunk/libs/proto/doc/reference/context/null.xml
 /trunk/libs/proto/doc/reference/core.xml
 /trunk/libs/proto/doc/reference/debug.xml
 /trunk/libs/proto/doc/reference/deep_copy.xml
 /trunk/libs/proto/doc/reference/domain.xml
 /trunk/libs/proto/doc/reference/eval.xml
 /trunk/libs/proto/doc/reference/expr.xml
 /trunk/libs/proto/doc/reference/extends.xml
 /trunk/libs/proto/doc/reference/fusion.xml
 /trunk/libs/proto/doc/reference/generate.xml
 /trunk/libs/proto/doc/reference/literal.xml
 /trunk/libs/proto/doc/reference/make_expr.xml
 /trunk/libs/proto/doc/reference/matches.xml
 /trunk/libs/proto/doc/reference/operators.xml
 /trunk/libs/proto/doc/reference/proto.xml
 /trunk/libs/proto/doc/reference/proto_fwd.xml
 /trunk/libs/proto/doc/reference/proto_typeof.xml
 /trunk/libs/proto/doc/reference/repeat.xml
 /trunk/libs/proto/doc/reference/tags.xml
 /trunk/libs/proto/doc/reference/traits.xml
 /trunk/libs/proto/doc/reference/transform
 /trunk/libs/proto/doc/reference/transform/arg.xml
 /trunk/libs/proto/doc/reference/transform/call.xml
 /trunk/libs/proto/doc/reference/transform/default.xml
 /trunk/libs/proto/doc/reference/transform/fold.xml
 /trunk/libs/proto/doc/reference/transform/fold_tree.xml
 /trunk/libs/proto/doc/reference/transform/impl.xml
 /trunk/libs/proto/doc/reference/transform/lazy.xml
 /trunk/libs/proto/doc/reference/transform/make.xml
 /trunk/libs/proto/doc/reference/transform/pass_through.xml
 /trunk/libs/proto/doc/reference/transform/when.xml
 /trunk/libs/proto/doc/reference.xml
Modified:
/trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/binom_eg/binomial_quiz_example.html /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/history1.html
 /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/perf/comparisons.html
 /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/perf/tuning.html
/trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/ct_pow.html /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/igamma.html
 /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/status/history1.html
/trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/cf.html /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/series_evaluation.html
 /trunk/libs/multi_index/doc/compiler_specifics.html
 /trunk/libs/multi_index/doc/release_notes.html
 /trunk/libs/numeric/ublas/doc/expression_concept.htm
 /trunk/libs/numeric/ublas/doc/index.htm
 /trunk/libs/numeric/ublas/doc/ublas.css
 /trunk/libs/parameter/doc/html/index.html
 /trunk/libs/python/doc/news.html

=======================================
--- /dev/null
+++ /trunk/libs/numeric/ublas/doc/js/jquery-1.3.2.min.js Mon Nov 30 05:58:26 2009
@@ -0,0 +1,19 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$| ^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E|| document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]| |!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G| |"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"| |E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument|| document).createTextNode(F))}var E="";o.each(F|| this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject|| o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+| null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value|| {}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio| checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0|| o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0| | o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+| null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument|| this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument|| this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1|| G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]| | N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text| |F.textContent||F.innerHTML| |"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]|| {},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K|| (L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView| | {},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"| |!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]|| document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F| |"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className|| F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))| |0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))|| 0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))|| 0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]|| I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L| |0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument|| document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area| embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]| |!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead| tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]| |!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]|| (!O.indexOf("<td")| |!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]| |!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]| |!o.support.htmlSerialize&&[1,"div<div>","</div>"]|| [0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type|| G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3|| J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]|| G;if(J.tagName){var F=/href|src| style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select| textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter| |"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E| |"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"|| o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it| ra|ie)[\/: ]([\d.]+)/)|| [0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible| webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument|| E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E| | o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G|| o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G|| G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ *  Copyright 2009, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]| ['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+| [>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U|| document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true|| ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]| |"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]| \\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]| \\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]| \\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]| \\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]| \\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd| [\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even| odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]| \\.)+)(?:\((['"]*)((?:\([^\)]+\)| [^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y| |U&&U.nodeName===T?U|| false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"| |!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]|| 1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1|| /^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type| |T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select| textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText| |"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)| |U.nodeName===T},CLASS:function(U,T){return(" "+(U.className|| U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="| ="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X| |document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"| |!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0|| T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0|| T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3|| I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")|| o.data(I,"events",{}),J=o.data(I,"handle")|| o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]| | o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3| |K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H| |""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^| \\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]|| o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H| |H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]|| (o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode|| H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.| $)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J|| I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement| | document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft| |E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop|| E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode|| H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode|| H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live|| {}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E|| G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F|| H,function(I){o(this).unbind(I,E);return(F|| H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle|| 0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)|| false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.| $)"),G=true,F=[];o.each(o.data(this,"events").live|| [],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H| |!H.length| |!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"| | L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.| \s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select| textarea/i.test(this.nodeName)||/text|hidden|password| search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp| |"callback")+"=?"}}else{if(!M.data| |!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp| |"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)| | M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&| $)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol| |Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState|| this.readyState=="loaded"|| this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]| |"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4| | X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"| |(F.status>=200&&F.status<300)||F.status==304|| F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304|| H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"| |!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)| |E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E| |"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")| |""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null| |E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"|| M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show| hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N|| 1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H|| o.isFunction(G)&&G,duration:G,easing:F&&H|| H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]|| o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]| |o.fx.step._default)(this);if((this.prop=="height"|| this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style| |this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))|| 0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G| |this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"| | this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H|| G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide| |this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing| | (o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop| |F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset|| o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset|| o.boxModel&&E.scrollLeft|| F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized|| o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able| d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)|| 0,I+=parseInt(M.borderLeftWidth,10)|| 0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)| |0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"|| E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized| |o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)| |0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)|| 0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body| html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent|| document.body;while(E&&(!/^body| html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l|| this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l| |this[0]==document?self[F?"pageYOffset":"pageXOffset"]|| o.boxModel&&document.documentElement[G]|| document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]| | document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
=======================================
--- /dev/null
+++ /trunk/libs/numeric/ublas/doc/js/jquery.toc-gw.js Mon Nov 30 05:58:26 2009
@@ -0,0 +1,166 @@
+/*!
+ * jQuery TOC Plugin v1.1.x based on
+ * samaxesJS JavaScript Library
+ * http://code.google.com/p/samaxesjs/
+ *
+ * Copyright (c) 2008 samaxes.com
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * 2009-10-04, guwi17: modified and extended to meet uBLAS' needs
+ */
+
+(function($) {
+    /*
+ * The TOC plugin dynamically builds a table of contents from the headings in + * a document and prepends legal-style section numbers to each of the headings.
+     */
+    $.fn.toc = function(options) {
+        var opts = $.extend({}, $.fn.toc.defaults, options);
+
+        return this.each(function() {
+            var toc = $(this).append('<ul></ul>').children('ul');
+            var headers = {h1: 0, h2: 0, h3: 0, h4: 0, h5: 0, h6: 0};
+            var index = 0;
+            var indexes = {
+ h1: (opts.exclude.match('h1') == null && $('h1').length > 0) ? ++index : 0, + h2: (opts.exclude.match('h2') == null && $('h2').length > 0) ? ++index : 0, + h3: (opts.exclude.match('h3') == null && $('h3').length > 0) ? ++index : 0, + h4: (opts.exclude.match('h4') == null && $('h4').length > 0) ? ++index : 0, + h5: (opts.exclude.match('h5') == null && $('h5').length > 0) ? ++index : 0, + h6: (opts.exclude.match('h6') == null && $('h6').length > 0) ? ++index : 0
+            };
+
+            $(':header').not(opts.exclude).each(function() {
+                var linkId = "";
+                if ($(this).is('h6')) {
+                    checkContainer(headers.h6, toc);
+                    updateNumeration(headers, 'h6');
+ $(this).text(addNumeration(headers, 'h6', $(this).text()));
+                    linkId = fixAnchor($(this));
+ appendToTOC(toc, indexes.h6, linkId, $(this).text(), headers);
+                } else if ($(this).is('h5')) {
+                    checkContainer(headers.h5, toc);
+                    updateNumeration(headers, 'h5');
+ $(this).text(addNumeration(headers, 'h5', $(this).text()));
+                    linkId = fixAnchor($(this));
+ appendToTOC(toc, indexes.h5, linkId, $(this).text(), headers);
+                } else if ($(this).is('h4')) {
+                    checkContainer(headers.h4, toc);
+                    updateNumeration(headers, 'h4');
+ $(this).text(addNumeration(headers, 'h4', $(this).text()));
+                    linkId = fixAnchor($(this));
+ appendToTOC(toc, indexes.h4, linkId, $(this).text(), headers);
+                } else if ($(this).is('h3')) {
+                    checkContainer(headers.h3, toc);
+                    updateNumeration(headers, 'h3');
+ $(this).text(addNumeration(headers, 'h3', $(this).text()));
+                    linkId = fixAnchor($(this));
+ appendToTOC(toc, indexes.h3, linkId, $(this).text(), headers);
+                } else if ($(this).is('h2')) {
+                    checkContainer(headers.h2, toc);
+                    updateNumeration(headers, 'h2');
+ $(this).text(addNumeration(headers, 'h2', $(this).text()));
+                    linkId = fixAnchor($(this));
+ appendToTOC(toc, indexes.h2, linkId, $(this).text(), headers);
+                } else if ($(this).is('h1')) {
+                    updateNumeration(headers, 'h1');
+ $(this).text(addNumeration(headers, 'h1', $(this).text()));
+                    linkId = fixAnchor($(this));
+ appendToTOC(toc, indexes.h1, linkId, $(this).text(), headers);
+                }
+            });
+        });
+    };
+
+    /*
+     * Checks if the last node is an 'ul' element.
+     * If not, a new one is created.
+     */
+    function checkContainer(header, toc) {
+        if (header == 0 && !toc.find(':last').is('ul')) {
+            toc.find('li:last').append('<ul></ul>');
+        }
+    };
+
+    /*
+     * Updates headers numeration.
+     */
+    function updateNumeration(headers, header) {
+        $.each(headers, function(i, val) {
+            if (i == header)  {
+                ++headers[i];
+            } else if (i > header) {
+                headers[i] = 0;
+            }
+        });
+    };
+
+    /*
+     * Prepends the numeration to a heading.
+     */
+    function addNumeration(headers, header, text) {
+        var numeration = '';
+
+        $.each(headers, function(i, val) {
+            if (i <= header && headers[i] > 0)  {
+                numeration += headers[i] + '.';
+            }
+        });
+
+        return removeFinalDot(numeration) + ' ' + text;
+    };
+
+    function removeFinalDot(text) {
+        return (text||"").replace(/\.$/g, "" )
+    }
+
+    function fixAnchor(element) {
+        // use existing id by default
+        var linkId = element.attr('id');
+        // next, look for an anchor and use its id or name
+        if ( !linkId ) {
+            element.find('> a:first').each( function() {
+                linkId = $(this).attr('id') || $(this).attr('name');
+            });
+        }
+        // next, use the text content as last resort
+        if ( !linkId ) {
+ linkId = (element.text()| |"unknown").replace(/[^a-zA-Z0-9]/g,"");
+        }
+
+        element.attr('id',linkId);
+        return linkId;
+    }
+
+    /*
+     * Appends a new node to the TOC.
+     */
+    function appendToTOC(toc, index, id, text, headers) {
+        var parent = toc;
+
+        for (var i = 1; i < index; i++) {
+            if (parent.find('> li:last > ul').length == 0) {
+                parent = parent.append('<li><ul></ul></li>');
+            }
+            parent = parent.find('> li:last > ul');
+        }
+        if (id) {
+ parent.append('<li><a href="#' + id + '">' + text + '</a></li>');
+        } else {
+            parent.append('<li>' + text + '</li>');
+        }
+    };
+
+    $.fn.toc.defaults = {exclude: 'h1, h5, h6'}
+})(jQuery);
=======================================
--- /dev/null
+++ /trunk/libs/numeric/ublas/doc/options.htm   Mon Nov 30 05:58:26 2009
@@ -0,0 +1,247 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd";>
+<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en" >
+<head>
+<meta name="generator" content="HTML Tidy for Linux (vers 6 November 2007), see www.w3.org" /> +<!-- tidy options: -w 120 -asxhtml -clean - - vertical-space yes -f index.htm.err -m index.htm -->
+<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<link rel="stylesheet" href="../../../../boost.css" type="text/css"/>
+<link rel="stylesheet" href="ublas.css" type="text/css" />
+<script type="text/javascript" src="js/jquery-1.3.2.min.js" async="async"
</script>
+<script type="text/javascript" src="js/jquery.toc-gw.js" async="async"
</script>
+<title>Boost Basic Linear Algebra - Configuration Options</title>
+</head>
+<body>
+<h1><img src="../../../../boost.png" align="middle" alt="logo"/>Boost Basic Linear Algebra - Configuration Options</h1>
+<div class="toc" id="toc"></div>
+
+<div class="navigation">
+<a href="index.htm">back to uBLAS home</a>
+</div>
+
+<h2>NDEBUG</h2>
+
+<p><strong>Make sure you define NDEBUG</strong> The only way uBLAS
+knows you want a release configuration is to check if you have defined
+NDEBUG. If you don't it assumes you want a debug configuration and
+adds a lot of very useful runtime check. However these are very slow!
+</p>
+
+
+<h2>BOOST_UBLAS_MOVE_SEMANTICS</h2>
+
+<p class="credit">The patch and description was provided by Nasos Iliopoulos.</p>
+
+<p>An immediate effect of this option is the elimination of the need
+for noalias in types <tt>vector&lt;T&gt;</tt> and <tt>matrix&lt;T&gt;</tt>,
+when assigned to the same type. This option doesn't have an effect on
+bounded and c types. Although it is rare, not all compilers support copy
+elision (that allows for move semantics), so a test must be performed to
+make sure that there is a benefit when it is enabled. A small
+demonstration and test can be found in
+<a href="../test/manual/test_move_semantics.cpp"><tt>test_move_semantics.cpp</tt></a></p>
+
+<p>
+In the <a href="../test/manual/test_move_semantics.cpp">test
+example</a> two tests are defined, one for vectors and one for
+matrices. The aim of this example is to print the pointers of the
+storage of each of the containers, before and after the assignment to
+a temporary object. When move semantics are enabled, the
+<tt>vector&lt;T&gt;</tt> and <tt>matrix&lt;T&gt;</tt> storage is moved
+from the temporary and no copy is performed.
+</p>
+
+<p>
+If move semantics are supported by your compiler you will get an output like the following:
+</p>
+<pre class="screen">
+matrix&lt;double&gt; --------------------------------------------------------------------
+Temporary pointer r: 0x94790c0
+Pointer (must be equal to temp. pointer if move semantics are enabled) : 0x94790c0
+</pre>
+
+<p>Notes:</p>
+<ul>
+<li>It should be no surprise to see matrices and vectors been passed
+by VALUE, the compiler takes care and either moves (if the underlying
+code does not modify the object), or copies (if the underlying code
+modifies the object).
+</li>
+<li>There might be some space for some improvements (like clearing the
+data, before swaping)
+</li>
+<li>Move semantics don't eliminate temporaries. They rather move their
+storage around so no copies are performed.
+</li>
+<li>MSVC does no implement Named Return Value Optimization in debug
+mode. So if you build in debug with this compiler you might get <a
+href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=483229";
+target="_blank">different behaviour</a> than a release build.
+</li>
+<li>Enabling move semantics is done via #define BOOST_UBLAS_MOVE_SEMANTICS.
+</li>
+<li>There is plenty of room for optimizations when c++0x standard is
+out, taking advantage of rvalue references. (I have a sweet vector
+implementation using that).
+</li>
+<li>If you enable move semantics and your compiler does not support
+them, the operation will just be as passing by const reference.
+</li>
+</ul>
+
+<p>Interesting links</p>
+<ul>
+<li> <a href="http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/"; target="_blank">Want Speed? Pass by Value.</a>
+</li>
+<li> <a href="http://blogs.msdn.com/vcblog/archive/2009/02/03/rvalue-references-c-0x-features-in-vc10-part-2.aspx"; target="_blank">Rvalue References: C++0x Features in VC10, Part 2</a>
+</li>
+<li> <a href="http://cpp-next.com/archive/2009/09/move-it-with-rvalue-references/"; target="_blank">Move It With Rvalue References</a>
+</li>
+</ul>
+
+<h2>BOOST_UBLAS_CHECK_ENABLE</h2>
+
+<p>When BOOST_UBLAS_CHECK_ENABLE is defined then all index and
+parameter checks are enabled. This is enabled in debug mode and
+disabled in release mode.
+</p>
+
+<h2>BOOST_UBLAS_TYPE_CHECK</h2>
+
+<p>When BOOST_UBLAS_TYPE_CHECK is enabled then all possibly expensive
+structure checks are enabled. If this is not desireable then use
+<tt>#define BOOST_UBLAS_TYPE_CHECK 0</tt> before including any uBLAS
+header. The define BOOST_UBLAS_TYPE_CHECK_EPSILON can be used to
+control the acceptable tolerance, see
+<tt>detail/matrix_assign.hpp</tt> for implementation details of this
+check.
+</p>
+
+<h2>BOOST_UBLAS_USE_LONG_DOUBLE</h2>
+
+<p>Enable uBLAS expressions that involve containers of 'long double'</p>
+
+<h2>BOOST_UBLAS_USE_INTERVAL</h2>
+
+<p>Enable uBLAS expressions that involve containers of 'boost::numeric::interval' types</p>
+
+<h2>Configuring uBLAS with Macros</h2>
+
+<p>Many macro's appear in ublas/config.hpp and elsewhere. Hopefully in the future some of these will disappear!
+They fall into 4 groups:
+</p>
+<ul>
+<li> Automatically set by 'boost/numeric/ublas/config.hpp' based on
+NDEBUG. Makes the distinction between debug (safe) and release (fast)
+mode. Similar to STLport
+<ul>
+<li> <i>Release</i> mode (NDEBUG defined)
+<ul>
+<li> BOOST_UBLAS_INLINE <i>Compiler dependant definition to control
+function inlining.</i> </li><li> BOOST_UBLAS_USE_FAST_SAME </li></ul>
+</li><li> <i>Debug</i> mode
+<ul>
+<li> BOOST_UBLAS_CHECK_ENABLE <i>Enable checking of indexs, iterators
+and parameters. Prevents out of bound access etc.</i> </li><li>
+BOOST_UBLAS_TYPE_CHECK <i>Enable additional checks for the results of
+expressions using non dense types. Picks up runtime error such as the
+assignment of a numerically non-symmetric matrix to
+symmertic_matrix. Use <tt>#define BOOST_UBLAS_TYPE_CHECK 0</tt> to
+disable expensive numeric type checks.</i> (Note: "structure check"
+would be a much better name.)  </li><li>
+BOOST_UBLAS_TYPE_CHECK_EPSILON <i>default: sqrt(epsilon), controls how
+large the difference between the expected result and the computed
+result may become. Increase this value if you are going to use near
+singular or badly scaled matrices. Please, refer to
+<tt>detail/matrix_assign.hpp</tt> for implementation of these type
+checks.</i> </li></ul> </li></ul>
+</li>
+<li> Automatically set by 'boost/numeric/ublas/config.hpp' based on
+compiler and boost/config.hpp macro's. Augments the compiler
+deficiency workarounds already supplied by boost/config.hpp
+<ul>
+<li> BOOST_UBLAS_NO_NESTED_CLASS_RELATION <i>A particularly nasty
+problem with VC7.1 Requires that uBLAS and the user use begin(it)
+rather then it.begin()</i> </li><li> BOOST_UBLAS_NO_SMART_PROXIES
+<i>Disable the automatic propagation of 'constantness' to
+proxies. Smart proxies automatically determine if the underling
+container they reference is constant or not. They adjust there
+definition of iterators and container access to reflect this
+constantness.</i> </li></ul>
+</li>
+<li> For use by uBLAS authors to test implementation methods. Preset
+in config.hpp
+<ul>
+<li> BOOST_UBLAS_USE_INVARIANT_HOISTING </li><li>
+BOOST_UBLAS_USE_INDEXING </li><li> BOOST_UBLAS_USE_INDEXED_ITERATOR
+</li><li> BOOST_UBLAS_NON_CONFORMANT_PROXIES <i>Gappy containers may
+be non-conformant, that is contain elements at different
+indices. Assigning between proxies (vector ranges for example) of
+these containers is difficult as the LHS may need insert new
+elements. This is slow.</i> </li><li> BOOST_UBLAS_USE_DUFF_DEVICE
+<i>Near useless on all platforms (see GCC's -funroll-loops)</i>
+
+</li></ul>
+</li>
+<li> User options. Can be predefined by user before including any
+uBLAS headers. They may also be automatically defined for some
+compilers to work around compile bugs.
+<ul>
+<li> BOOST_UBLAS_USE_LONG_DOUBLE <i>Enable uBLAS expressions that
+involve containers of 'long double'</i> </li><li>
+BOOST_UBLAS_USE_INTERVAL <i>Enable uBLAS expressions that involve
+containers of 'boost::numeric::interval' types</i> </li><li>
+BOOST_UBLAS_SIMPLE_ET_DEBUG <i>In order to simplify debugging is is
+possible to simplify expression templateso they are restricted to a
+single operation</i>
+
+</li><li> BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS <i> enable automatic
+conversion from proxy class to matrix expression </i> </li><li>
+BOOST_UBLAS_NO_ELEMENT_PROXIES <i>Disables the use of element proxies
+for gappy types.</i> </li><li> <i>The Gappy types (sparse, coordinate,
+compressed) store non-zero elements in their own containers. When new
+non-zero elements are assigned they must rearrange these
+containers. This invalidates references, iterators or pointers to
+these elements. This can happen at some surprising times such as the
+expression "a [1] = a [0] = 1;". Element proxies guarantee all such
+expressions will work as expected. However they bring their own
+restrictions and efficiency problems. For example as of Boost 1.30.0
+they prevent the assignment of elements between different types.</i>
+</li>
+<li> BOOST_UBLAS_REFERENCE_CONST_MEMBER <i>Enable to allow refernces
+to be returned to fixed (zero or one) elements of triangular or banded
+matrices</i>
+
+</li><li> BOOST_UBLAS_NO_EXCEPTIONS <i>Disable the use exceptions of
+uBLAS internal checks and error conditions. BOOST_NO_EXCEPTIONS has
+same effect.</i>
+</li>
+<li> BOOST_UBLAS_SINGULAR_CHECK <i>Check the for singularity in triangular solve() functions</i></li>
+</ul>
+</li>
+</ul>
+
+<hr />
+<div id="copyright">
+ <p>Copyright (&copy;) 2000-2009 Joerg Walter, Mathias Koch, Gunter Winkler<br /> + Use, modification and distribution are subject to the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt";>
+      http://www.boost.org/LICENSE_1_0.txt
+   </a>).
+ </p>
+</div>
+<div id="revision">
+<p>
+<!-- Created: Wed Sep 16 21:19:20 CEST 2009 -->
+<!-- hhmts start -->
+Last modified: Wed Sep 16 23:16:45 CEST 2009
+<!-- hhmts end -->
+</p>
+</div>
+<script type="text/javascript">
+(function($) {
+    $('#toc').toc();
+})(jQuery);
+</script>
+</body>
+</html>
=======================================
--- /dev/null
+++ /trunk/libs/numeric/ublas/doc/release_notes.htm     Mon Nov 30 05:58:26 2009
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
+<html xmlns="http://www.w3.org/1999/xhtml";>
+<head>
+<meta name="generator" content="HTML Tidy for Linux (vers 6 November 2007), see www.w3.org" /> +<!-- tidy options: -w 120 -asxhtml -clean - - vertical-space yes -f index.htm.err -m index.htm -->
+<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<link rel="stylesheet" href="../../../../boost.css" type="text/css"/>
+<link rel="stylesheet" href="ublas.css" type="text/css" />
+<script type="text/javascript" src="js/jquery-1.3.2.min.js" async="async"
</script>
+<script type="text/javascript" src="js/jquery.toc-gw.js" async="async"
</script>
+<title>Boost Basic Linear Algebra - Release Notes</title>
+</head>
+<body>
+<h1><img src="../../../../boost.png" align="middle" alt="logo"/>Boost Basic Linear Algebra - Release Notes</h1>
+
+<div class="navigation">
+<a href="index.htm">back to uBLAS home</a>
+</div>
+<div class="toc" id="toc"></div>
+
+<h2>Release 1.41.1</h2>
+
+<h3>new features</h3>
+
+<ul>
+<li>Move semantics of vector/matrix container assignments have been
+implemented. They can be enabled by setting
+BOOST_UBLAS_MOVE_SEMANTICS. More details are on the <a
+href="options.htm">preprocessor options page</a>.
+</li>
+<li>Introduce new free functions. See <a href="https://svn.boost.org/trac/boost/ticket/3449"; target="_blank">[3449]</a>, +the new tests in <tt>libs/numeric/ublas/test</tt> and the inline documentation of the files in <tt>boost/numeric/ublas/operation/</tt>.
+</li>
+</ul>
+
+<h3>bug fixes</h3>
+
+<ul>
+<li><a href="https://svn.boost.org/trac/boost/ticket/3293";>[3293]</a>Fix resizing problem in <code>identity_matrix</code>
+</li>
+<li><a href="https://svn.boost.org/trac/boost/ticket/3499";>[3499]</a>Add DefaultConstructible to concept checks
+</li>
+<li><a href="https://svn.boost.org/trac/boost/ticket/3501";>[3501]</a>Add <i>inline</i> to free functions in <code>concepts.hpp</code>
+</li>
+</ul>
+
+<h2>Release 1.40.0 and before</h2>
+<ul>
+<li>Release notes were not available in this form.</li>
+</ul>
+
+<hr />
+<p>Copyright (&copy;) 2000-2009 Joerg Walter, Mathias Koch, Gunter Winkler<br /> + Use, modification and distribution are subject to the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt";>
+      http://www.boost.org/LICENSE_1_0.txt
+   </a>).
+</p>
+<!-- Created: Sun Sep 13 00:57:13 CEST 2009 -->
+<script type="text/javascript">
+(function($) {
+    $('#toc').toc();
+})(jQuery);
+</script>
+  </body>
+</html>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/args.xml    Mon Nov 30 05:58:26 2009
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/args.hpp">
+  <para>
+    Contains definitions of the <computeroutput>
+ <classname alt="boost::proto::term">proto::term&lt;&gt;</classname></computeroutput>, + <computeroutput><classname alt="boost::proto::listN">proto::list1&lt;&gt;</classname></computeroutput>, + <computeroutput><classname alt="boost::proto::listN">proto::list2&lt;&gt;</classname></computeroutput>, etc.
+    class templates.
+  </para>
+
+  <namespace name="boost">
+    <namespace name="proto">
+
+      <!-- proto::term<> -->
+      <struct name="term">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <purpose>A type sequence, for use as the 2<superscript>nd</superscript> parameter to the <computeroutput> + <classname alt="proto::expr">proto::expr&lt;&gt;</classname></computeroutput> class template.</purpose>
+        <description>
+          <para>
+ A type sequence, for use as the 2<superscript>nd</superscript> parameter to the <computeroutput> + <classname alt="proto::expr">proto::expr&lt;&gt;</classname></computeroutput> class template. The + types in the sequence correspond to the children of a node in an expression tree.
+          </para>
+        </description>
+        <data-member name="arity" specifiers="static">
+          <purpose><computeroutput>= 0;</computeroutput></purpose>
+          <type>const long</type>
+        </data-member>
+        <typedef name="child0">
+          <type>T</type>
+        </typedef>
+      </struct>
+
+      <!-- proto::list1<>, proto::list2<> ... -->
+      <struct name="listN">
+        <template>
+          <template-type-parameter name="Arg" pack="1"/>
+        </template>
+ <purpose><computeroutput>proto::list1&lt;&gt;</computeroutput>, <computeroutput>proto::list2&lt;&gt;</computeroutput>, etc., + are type sequences for use as the 2<superscript>nd</superscript> parameter to the <computeroutput> + <classname>proto::expr&lt;&gt;</classname></computeroutput> class template.</purpose>
+        <description>
+          <para>
+ Type sequences, for use as the 2<superscript>nd</superscript> parameter to the <computeroutput> + <classname>proto::expr&lt;&gt;</classname></computeroutput> class template. The + types in the sequence correspond to the children of a node in an expression tree. + There is no type literally named "<computeroutput>listN</computeroutput>"; rather, there is
+            a set of types named
+            <computeroutput>proto::list1&lt;&gt;</computeroutput>,
+            <computeroutput>proto::list2&lt;&gt;</computeroutput>, etc.
+          </para>
+        </description>
+        <data-member name="arity" specifiers="static">
+          <purpose><computeroutput>= N;</computeroutput></purpose>
+          <type>const long</type>
+        </data-member>
+        <typedef name="childM">
+ <purpose>For each <replaceable>M</replaceable> in <replaceable>[0,N)</replaceable></purpose>
+          <type>Arg<replaceable>M</replaceable></type>
+        </typedef>
+      </struct>
+
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/concepts/BasicPrimitiveTransform.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,92 @@
+<?xml version="1.0" ?>
+<concept name="BasicPrimitiveTransform" category="utility">
+  <!--
+  Copyright 2008 Eric Niebler
+
+  Distributed under the Boost
+  Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+  -->
+  <param name="Fn" role="basic-primitive-transform-type" />
+  <param name="Expr" role="expression-type" />
+  <param name="State" role="state-type" />
+  <param name="Data" role="data-type" />
+
+  <models-sentence>
+    The type <arg num="1" /> must be a model of <self/>.
+  </models-sentence>
+
+  <description>
+    <para>
+      A BasicPrimitiveTransform is class type that
+      has a nested class template called impl that takes
+      three template parameters representing an expression
+      type, a state type and a data type. Specializations
+      of the nested impl template are ternary monomorphic
+      function objects that accept expression, state, and
+      data parameters.
+    </para>
+  </description>
+
+  <notation variables="fn">
+    <sample-value>
+      <type name="Fn" />
+    </sample-value>
+  </notation>
+
+  <notation variables="expr">
+    <sample-value>
+      <type name="Expr" />
+    </sample-value>
+  </notation>
+
+  <notation variables="state">
+    <sample-value>
+      <type name="State" />
+    </sample-value>
+  </notation>
+
+  <notation variables="data">
+    <sample-value>
+      <type name="Data" />
+    </sample-value>
+  </notation>
+
+  <associated-type name="result_type">
+    <get-member-type name="result_type">
+      <apply-template name="typename Fn::template impl">
+        <type name="Expr"/>
+        <type name="State"/>
+        <type name="Data"/>
+      </apply-template>
+    </get-member-type>
+    <description>
+ <simpara>The return type of the overloaded function call operator.</simpara>
+    </description>
+  </associated-type>
+
+  <valid-expression name="Monomorphic Function Call">
+ <apply-function name="typename Fn::template impl&lt; Expr, State, Data &gt;()">
+      <sample-value>
+        <type name="Expr" />
+      </sample-value>
+      <sample-value>
+        <type name="State" />
+      </sample-value>
+      <sample-value>
+        <type name="Data" />
+      </sample-value>
+    </apply-function>
+    <return-type>
+      <require-same-type testable="yes">
+        <type name="result_type"/>
+      </require-same-type>
+    </return-type>
+    <semantics>Applies the transform.</semantics>
+  </valid-expression>
+
+  <example-model>
+    <type name="boost::proto::terminal&lt; int &gt;" />
+  </example-model>
+
+</concept>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/concepts/CallableTransform.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,93 @@
+<?xml version="1.0" ?>
+<concept name="CallableTransform" category="utility">
+  <!--
+  Copyright 2008 Eric Niebler
+
+  Distributed under the Boost
+  Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+  -->
+  <param name="Fn" role="polymorphic-function-object-type" />
+  <param name="Tn" role="transform-type" />
+  <param name="Expr" role="expression-type" />
+  <param name="State" role="state-type" />
+  <param name="Data" role="data-type" />
+
+  <models-sentence>
+ The type <arg num="1" /> must be a model of <conceptname name="PolymorphicFunctionObject"/>. + The type <arg num="2" /> must be a model of <conceptname name="Transform"/>.
+  </models-sentence>
+
+  <description>
+    <para>
+      A CallableTransform is a function type or a function
+      pointer type where the return type Fn is a
+      PolymorphicFunctionObject and the arguments are
+      Transforms. is_callable&lt; Fn &gt;::value
+      must be true. The CallableTransform, when applied,
+      has the effect of invoking the polymorphic function
+      object Fn, passing as arguments the result(s)
+      of applying transform(s) Tn.
+    </para>
+  </description>
+
+  <notation variables="fn">
+    <sample-value>
+      <type name="Fn" />
+    </sample-value>
+  </notation>
+
+  <notation variables="expr">
+    <sample-value>
+      <type name="Expr" />
+    </sample-value>
+  </notation>
+
+  <notation variables="state">
+    <sample-value>
+      <type name="State" />
+    </sample-value>
+  </notation>
+
+  <notation variables="data">
+    <sample-value>
+      <type name="Data" />
+    </sample-value>
+  </notation>
+
+  <associated-type name="result_type">
+    <get-member-type name="type">
+      <apply-template name="boost::result_of">
+ <type name="Fn(Transform&lt;Tn, Expr, State, Data&gt;::result_type...)"/>
+      </apply-template>
+    </get-member-type>
+    <description>
+      <simpara>The result of applying the CallableTransform.</simpara>
+    </description>
+  </associated-type>
+
+  <valid-expression name="Apply Transform">
+    <apply-function name="when&lt; _, Fn(Tn...)&gt;()">
+      <sample-value>
+        <type name="Expr" />
+      </sample-value>
+      <sample-value>
+        <type name="State" />
+      </sample-value>
+      <sample-value>
+        <type name="Data" />
+      </sample-value>
+    </apply-function>
+    <return-type>
+      <require-same-type testable="yes">
+        <type name="result_type"/>
+      </require-same-type>
+    </return-type>
+    <semantics>Applies the transform.</semantics>
+  </valid-expression>
+
+  <example-model>
+    <type name="boost::proto::_child(boost::proto::_left)" />
+  </example-model>
+
+</concept>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/concepts/ObjectTransform.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,94 @@
+<?xml version="1.0" ?>
+<concept name="ObjectTransform" category="utility">
+  <!--
+  Copyright 2008 Eric Niebler
+
+  Distributed under the Boost
+  Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+  -->
+  <param name="Obj" role="object-type" />
+  <param name="Tn" role="transform-type" />
+  <param name="Expr" role="expression-type" />
+  <param name="State" role="state-type" />
+  <param name="Data" role="data-type" />
+
+  <models-sentence>
+ The type <arg num="1" /> must be a model of <conceptname name="Regular"/>, or + else it is a template specialization representing a lamda expression that, + subsequent to type substitution, is a type that models <conceptname name="Regular"/>. + The type <arg num="2" /> must be a model of <conceptname name="Transform"/>.
+  </models-sentence>
+
+  <description>
+    <para>
+      An ObjectTransform is a function type or a function
+      pointer type where the return type Obj is a
+      an object type and the arguments are
+      Transforms. is_callable&lt; Obj &gt;::value
+      must be false. The ObjectTransform, when applied,
+      has the effect of constructing an object of type
+      Obj' (see below), passing as construction parameters
+      the result(s) of applying transform(s) Tn.
+    </para>
+    <para>
+      The type Obj may be a template specialization representing
+      a compile-time lambda expression. For instance, if Obj is
+      std::pair&lt; proto::_value, int &gt;, the result type of the
+      ObjectTransform is computed by replacing the type proto::_value
+      with the result of applying the proto::_value transform. For
+      given types Obj, Expr, State and Data, we can say that the
+      type Obj' represents the type Obj after all nested transforms
+      have been replaced with the results of applying the transforms
+      with Expr, State and Data as transform arguments.
+    </para>
+    <para>
+      If the type Obj is not a template specialization representing
+      a compile-time lambda expression, then the result type Obj' is
+      the same as Obj.
+    </para>
+  </description>
+
+  <notation variables="expr">
+    <sample-value>
+      <type name="Expr" />
+    </sample-value>
+  </notation>
+
+  <notation variables="state">
+    <sample-value>
+      <type name="State" />
+    </sample-value>
+  </notation>
+
+  <notation variables="data">
+    <sample-value>
+      <type name="Data" />
+    </sample-value>
+  </notation>
+
+  <valid-expression name="Apply Transform">
+    <apply-function name="when&lt; _, Obj(Tn...)&gt;()">
+      <sample-value>
+        <type name="Expr" />
+      </sample-value>
+      <sample-value>
+        <type name="State" />
+      </sample-value>
+      <sample-value>
+        <type name="Data" />
+      </sample-value>
+    </apply-function>
+    <return-type>
+      <require-same-type testable="yes">
+        <type name="Obj'"/>
+      </require-same-type>
+    </return-type>
+    <semantics>Applies the transform.</semantics>
+  </valid-expression>
+
+  <example-model>
+ <type name="std::pair&lt; boost::proto::_value, int &gt;(boost::proto::_value, int())" />
+  </example-model>
+
+</concept>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/concepts/PolymorphicFunctionObject.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,66 @@
+<?xml version="1.0" ?>
+<concept name="PolymorphicFunctionObject" category="utility">
+  <!--
+  Copyright 2008 Eric Niebler
+
+  Distributed under the Boost
+  Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+  -->
+  <param name="Fn" role="polymorphic-function-object-type" />
+
+  <models-sentence>
+    The type <arg num="1" /> must be a model of <self/>.
+  </models-sentence>
+
+  <description>
+    <para>
+      A type that can be called and that follows the TR1 ResultOf
+      protocol for return type calculation.
+    </para>
+  </description>
+
+  <notation variables="fn">
+    <sample-value>
+      <type name="Fn" />
+    </sample-value>
+  </notation>
+
+  <notation variables="a0,...an">
+    <sample-value>
+      <type name="A0,...An" />
+    </sample-value>
+  </notation>
+
+  <associated-type name="result_type">
+    <get-member-type name="type">
+      <apply-template name="result_of">
+        <apply-function name="Fn">
+          <type name="A0,...An" />
+        </apply-function>
+      </apply-template>
+    </get-member-type>
+    <description>
+ <simpara>The result of calling the Polymorphic Function Object.</simpara>
+    </description>
+  </associated-type>
+
+  <valid-expression name="Function Call">
+    <apply-function name="fn">
+      <sample-value>
+        <type name="A0,...An" />
+      </sample-value>
+    </apply-function>
+    <return-type>
+      <require-same-type testable="yes">
+        <type name="result_type"/>
+      </require-same-type>
+    </return-type>
+    <semantics>Calls the function object.</semantics>
+  </valid-expression>
+
+  <example-model>
+    <type name="std::plus&lt;int&gt;" />
+  </example-model>
+
+</concept>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/concepts/PrimitiveTransform.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,147 @@
+<?xml version="1.0" ?>
+<concept name="PrimitiveTransform" category="utility">
+  <!--
+  Copyright 2008 Eric Niebler
+
+  Distributed under the Boost
+  Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+  -->
+  <param name="Fn" role="primitive-transform-type" />
+  <param name="Expr" role="expression-type" />
+  <param name="State" role="state-type" />
+  <param name="Data" role="data-type" />
+
+  <models-sentence>
+    The type <arg num="1" /> must be a model of <self/>.
+  </models-sentence>
+
+  <description>
+    <para>
+      A PrimitiveTransform is a class type that
+      has a nested class template called
+      <computeroutput>impl&lt;&gt;</computeroutput> that takes
+      three template parameters representing an expression
+      type, a state type and a data type. Specializations
+      of the nested impl template are ternary monomorphic
+      function objects that accept expression, state, and
+      data parameters. A PrimitiveTransform is also a
+      <conceptname>PolymorphicFunctionObject</conceptname>
+      implemented in terms of the nested
+      <computeroutput>impl&lt;&gt;</computeroutput> template.
+    </para>
+  </description>
+
+  <notation variables="fn">
+    <sample-value>
+      <type name="Fn" />
+    </sample-value>
+  </notation>
+
+  <notation variables="expr">
+    <sample-value>
+      <type name="Expr" />
+    </sample-value>
+  </notation>
+
+  <notation variables="state">
+    <sample-value>
+      <type name="State" />
+    </sample-value>
+  </notation>
+
+  <notation variables="data">
+    <sample-value>
+      <type name="Data" />
+    </sample-value>
+  </notation>
+
+  <associated-type name="result_type">
+    <get-member-type name="result_type">
+      <apply-template name="typename Fn::template impl">
+        <type name="Expr"/>
+        <type name="State"/>
+        <type name="Data"/>
+      </apply-template>
+    </get-member-type>
+    <description>
+ <simpara>The return type of the overloaded function call operator.</simpara>
+    </description>
+  </associated-type>
+
+  <valid-expression name="Polymorphic Function Call 1">
+    <apply-function name="fn">
+      <sample-value>
+        <type name="Expr" />
+      </sample-value>
+    </apply-function>
+    <return-type>
+      <require-same-type testable="yes">
+        <type name="result_type"/>
+      </require-same-type>
+    </return-type>
+    <semantics>Applies the transform.</semantics>
+  </valid-expression>
+
+  <valid-expression name="Polymorphic Function Call 2">
+    <apply-function name="fn">
+      <sample-value>
+        <type name="Expr" />
+      </sample-value>
+      <sample-value>
+        <type name="State" />
+      </sample-value>
+    </apply-function>
+    <return-type>
+      <require-same-type testable="yes">
+        <type name="result_type"/>
+      </require-same-type>
+    </return-type>
+    <semantics>Applies the transform.</semantics>
+  </valid-expression>
+
+  <valid-expression name="Polymorphic Function Call 3">
+    <apply-function name="fn">
+      <sample-value>
+        <type name="Expr" />
+      </sample-value>
+      <sample-value>
+        <type name="State" />
+      </sample-value>
+      <sample-value>
+        <type name="Data" />
+      </sample-value>
+    </apply-function>
+    <return-type>
+      <require-same-type testable="yes">
+        <type name="result_type"/>
+      </require-same-type>
+    </return-type>
+    <semantics>Applies the transform.</semantics>
+  </valid-expression>
+
+  <valid-expression name="Monomorphic Function Call">
+ <apply-function name="typename Fn::template impl&lt; Expr, State, Data &gt;()">
+      <sample-value>
+        <type name="Expr" />
+      </sample-value>
+      <sample-value>
+        <type name="State" />
+      </sample-value>
+      <sample-value>
+        <type name="Data" />
+      </sample-value>
+    </apply-function>
+    <return-type>
+      <require-same-type testable="yes">
+        <type name="result_type"/>
+      </require-same-type>
+    </return-type>
+    <semantics>Applies the transform.</semantics>
+  </valid-expression>
+
+  <example-model>
+    <type name="boost::proto::_child_c&lt; 0 &gt;" />
+  </example-model>
+
+</concept>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/concepts/Transform.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,79 @@
+<?xml version="1.0" ?>
+<concept name="Transform" category="utility">
+  <!--
+  Copyright 2008 Eric Niebler
+
+  Distributed under the Boost
+  Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+  -->
+  <param name="Tn" role="transform-type" />
+  <param name="Expr" role="expression-type" />
+  <param name="State" role="state-type" />
+  <param name="Data" role="data-type" />
+
+  <models-sentence>
+    The type <arg num="1" /> must be a model of <self/>.
+  </models-sentence>
+
+  <description>
+    <para>
+      A Transform is a PrimitiveTransform, a CallableTransform
+      or an ObjectTransform.
+    </para>
+  </description>
+
+  <notation variables="expr">
+    <sample-value>
+      <type name="Expr" />
+    </sample-value>
+  </notation>
+
+  <notation variables="state">
+    <sample-value>
+      <type name="State" />
+    </sample-value>
+  </notation>
+
+  <notation variables="data">
+    <sample-value>
+      <type name="Data" />
+    </sample-value>
+  </notation>
+
+  <associated-type name="result_type">
+    <get-member-type name="type">
+      <apply-template name="boost::result_of">
+        <type name="when&lt; _, Tn &gt;(Expr, State, Data)"/>
+      </apply-template>
+    </get-member-type>
+    <description>
+      <simpara>The result of applying the Transform.</simpara>
+    </description>
+  </associated-type>
+
+  <valid-expression name="Apply Transform">
+    <apply-function name="when&lt; _, Tn &gt;()">
+      <sample-value>
+        <type name="Expr" />
+      </sample-value>
+      <sample-value>
+        <type name="State" />
+      </sample-value>
+      <sample-value>
+        <type name="Data" />
+      </sample-value>
+    </apply-function>
+    <return-type>
+      <require-same-type testable="yes">
+        <type name="result_type"/>
+      </require-same-type>
+    </return-type>
+    <semantics>Applies the transform.</semantics>
+  </valid-expression>
+
+  <example-model>
+    <type name="boost::proto::_child(boost::proto::_left)" />
+  </example-model>
+
+</concept>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/context/callable.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/context/callable.hpp">
+ <para>Definintion of <computeroutput><classname alt="boost::proto::context::callable_context">proto::context::callable_context&lt;&gt;</classname></computeroutput>, + an evaluation context for <computeroutput><functionname alt="boost::proto::eval">proto::eval()</functionname></computeroutput> + that fans out each node and calls the derived context type with the expressions constituents. If the derived context + doesn't have an overload that handles this node, fall back to some other context. </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="context">
+        <struct name="callable_eval">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="Context"/>
+          </template>
+ <purpose>A BinaryFunction that accepts a Proto expression and a callable context and calls + the context with the expression tag and children as arguments, effectively fanning the
+            expression out. </purpose>
+          <description>
+            <para>
+ <computeroutput>proto::context::callable_eval&lt;&gt;</computeroutput> requires that + <computeroutput>Context</computeroutput> is a <conceptname>PolymorphicFunctionObject</conceptname> + that can be invoked with <computeroutput>Expr</computeroutput>'s tag and children as
+              expressions, as follows:
+ <programlisting>context(typename Expr::proto_tag(), <functionname>proto::child_c</functionname>&lt;0&gt;(expr), ... <functionname>proto::child_c</functionname>&lt;N&gt;(expr))</programlisting>
+            </para>
+          </description>
+          <typedef name="result_type">
+            <type>typename boost::result_of&lt;
+    Context(
+      typename Expr::proto_tag,
+      typename proto::result_of::child_c&lt;0&gt;::type,
+      ...
+      typename proto::result_of::child_c&lt;N&gt;::type,
+    )&gt;::type
+  </type>
+          </typedef>
+
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>result_type</type>
+              <parameter name="expr">
+                <paramtype>Expr &amp;</paramtype>
+                <description>
+                  <para>The current expression </para>
+                </description>
+              </parameter>
+              <parameter name="context">
+                <paramtype>Context &amp;</paramtype>
+                <description>
+                  <para>The callable evaluation context </para>
+                </description>
+              </parameter>
+              <returns>
+                <para>
+                  <computeroutput>
+                    context(typename Expr::proto_tag(),
+ <functionname>proto::child_c</functionname>&lt;0&gt;(expr),... + <functionname>proto::child_c</functionname>&lt;N&gt;(expr))
+                  </computeroutput>
+                </para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+
+        <struct name="callable_context">
+          <template>
+            <template-type-parameter name="Context"/>
+            <template-type-parameter name="DefaultCtx">
+ <default><classname>proto::context::default_context</classname></default>
+            </template-type-parameter>
+          </template>
+ <purpose>An evaluation context adaptor that makes authoring a context a simple matter of + writing function overloads, rather then writing template specializations.</purpose>
+          <description>
+            <para>
+ <computeroutput>proto::callable_context&lt;&gt;</computeroutput> is a base class that + implements the context protocol by passing fanned-out expression nodes to the derived + context, making it easy to customize the handling of expression types by writing function + overloads. Only those expression types needing special handling require explicit handling. + All others are dispatched to a user-specified default context,
+              <computeroutput>DefaultCtx</computeroutput>.
+            </para>
+            <para>
+ <computeroutput>proto::callable_context&lt;&gt;</computeroutput> is defined simply as:
+            </para>
+            <para>
+ <programlisting>template&lt;typename Context, typename DefaultCtx = default_context&gt;
+struct callable_context {
+  template&lt;typename Expr, typename ThisContext = Context&gt;
+  struct eval :
+    mpl::if_&lt;
+      is_expr_handled_&lt;Expr, Context&gt;, // For exposition
+ <classname>proto::context::callable_eval</classname>&lt;Expr, ThisContext&gt;,
+      typename DefaultCtx::template eval&lt;Expr, Context&gt;
+    &gt;::type
+  {};
+};</programlisting>
+            </para>
+            <para>
+ The Boolean metafunction <computeroutput>is_expr_handled_&lt;&gt;</computeroutput> uses + metaprogramming tricks to determine whether <computeroutput>Context</computeroutput> has + an overloaded function call operator that accepts the fanned-out constituents of an + expression of type <computeroutput>Expr</computeroutput>. If so, the handling of the
+              expression is dispatched to
+ <computeroutput><classname>proto::context::callable_eval&lt;&gt;</classname></computeroutput>. + If not, it is dispatched to the user-specified <computeroutput>DefaultCtx</computeroutput>.
+            </para>
+            <para>
+              <emphasis role="bold">Example:</emphasis>
+            </para>
+            <para>
+              <programlisting>// An evaluation context that increments all
+// integer terminals in-place.
+struct increment_ints :
+  <classname>proto::context::callable_context</classname>&lt;
+    increment_ints const                // derived context
+ <classname>proto::context::null_context</classname> const // fall-back context
+  &gt;
+{
+    typedef void result_type;
+
+    // Handle int terminals here:
+    void operator()(proto::tag::terminal, int &amp;i) const
+    {
+       ++i;
+    }
+};</programlisting>
+            </para>
+            <para>
+ With <computeroutput>increment_ints</computeroutput>, we can do the following:
+            </para>
+            <para>
+ <programlisting><classname>proto::literal</classname>&lt;int&gt; i = 0, j = 10;
+proto::eval( i - j * 3.14, increment_ints() );
+
+assert( i.get() == 1 &amp;&amp; j.get() == 11 );</programlisting>
+            </para>
+          </description>
+          <struct name="eval">
+            <template>
+              <template-type-parameter name="Expr"/>
+              <template-type-parameter name="ThisContext">
+                <default>Context</default>
+              </template-type-parameter>
+            </template>
+            <description>
+              <para>
+ A BinaryFunction that accepts an <computeroutput>Expr</computeroutput> and a + <computeroutput>Context</computeroutput>, and either fans out the expression and passes + it to the context, or else hands off the expression to <computeroutput>DefaultCtx</computeroutput>.
+              </para>
+              <para>
+ If <computeroutput>Context</computeroutput> is a <conceptname>PolymorphicFunctionObject</conceptname> + such that it can be invoked with the tag and children of <computeroutput>Expr</computeroutput>, as + <computeroutput>ctx(typename Expr::proto_tag(), child_c&lt;0&gt;(expr),... child_c&lt;N&gt;(expr))</computeroutput>, + then <computeroutput>eval&lt;Expr, ThisContext&gt;</computeroutput> inherits from + <computeroutput><classname>proto::context::callable_eval</classname>&lt;Expr, ThisContext&gt;</computeroutput>. + Otherwise, <computeroutput>eval&lt;Expr, ThisContext&gt;</computeroutput> inherits from + <computeroutput>DefaultCtx::eval&lt;Expr, Context&gt;</computeroutput>.
+              </para>
+            </description>
+ <inherit><type><replaceable>see-below</replaceable></type></inherit>
+          </struct>
+        </struct>
+      </namespace>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/context/default.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/context/default.hpp">
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="context">
+        <struct name="default_eval">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="Context"/>
+          </template>
+          <purpose>
+ A BinaryFunction that accepts a Proto expression and a context, evaluates + each child expression with the context, and combines the result using the + standard C++ meaning for the operator represented by the current expression
+            node.
+          </purpose>
+          <description>
+            <para>
+ Let <computeroutput><computeroutput>OP</computeroutput></computeroutput> be the C++ operator + corresponding to <computeroutput>Expr::proto_tag</computeroutput>. (For example, if
+              <computeroutput>Tag</computeroutput> is <computeroutput>
+ <classname>proto::tag::plus</classname></computeroutput>, let <computeroutput> + <computeroutput>OP</computeroutput></computeroutput> be <computeroutput>+</computeroutput>.)
+            </para>
+            <para>
+ The behavior of this class is specified in terms of the C++0x <computeroutput>decltype</computeroutput> + keyword. In systems where this keyword is not available, Proto uses the Boost.Typeof library to
+              approximate the behavior.
+            </para>
+          </description>
+          <typedef name="Tag">
+            <purpose>For exposition only</purpose>
+            <type>typename Expr::tag_type</type>
+          </typedef>
+          <data-member name="s_expr" specifiers="static">
+            <purpose>For exposition only</purpose>
+            <type>Expr &amp;</type>
+          </data-member>
+          <data-member name="s_context" specifiers="static">
+            <purpose>For exposition only</purpose>
+            <type>Context &amp;</type>
+          </data-member>
+          <typedef name="result_type">
+            <type><emphasis>see-below</emphasis></type>
+            <description>
+              <itemizedlist>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> corresponds to a unary prefix operator,
+                    then the result type is
+                    <programlisting>decltype(
+ OP <functionname>proto::eval</functionname>(<functionname>proto::child</functionname>(s_expr), s_context)
+)</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> corresponds to a unary postfix operator,
+                    then the result type is
+                    <programlisting>decltype(
+ <functionname>proto::eval</functionname>(<functionname>proto::child</functionname>(s_expr), s_context) OP
+)</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> corresponds to a binary infix operator,
+                    then the result type is
+                    <programlisting>decltype(
+ <functionname>proto::eval</functionname>(<functionname>proto::left</functionname>(s_expr), s_context) OP + <functionname>proto::eval</functionname>(<functionname>proto::right</functionname>(s_expr), s_context)
+)</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                <para>
+ If <computeroutput>Tag</computeroutput> is <computeroutput>
+                    <classname>proto::tag::subscript</classname>
+                  </computeroutput>,
+                  then the result type is
+                  <programlisting>decltype(
+ <functionname>proto::eval</functionname>(<functionname>proto::left</functionname>(s_expr), s_context) [ + <functionname>proto::eval</functionname>(<functionname>proto::right</functionname>(s_expr), s_context) ]
+)</programlisting>
+                </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> is <computeroutput>
+                      <classname>proto::tag::if_else_</classname>
+                    </computeroutput>,
+                    then the result type is
+                    <programlisting>decltype(
+ <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;0&gt;(s_expr), s_context) ? + <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;1&gt;(s_expr), s_context) : + <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;2&gt;(s_expr), s_context)
+)</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> is <computeroutput>
+                      <classname>proto::tag::function</classname>
+                    </computeroutput>,
+                    then the result type is
+                    <programlisting>decltype(
+ <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;0&gt;(s_expr), s_context) ( + <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;1&gt;(s_expr), s_context),
+  ...
+ <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;N&gt;(s_expr), s_context) )
+)</programlisting>
+                  </para>
+                </listitem>
+              </itemizedlist>
+            </description>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>result_type</type>
+              <parameter name="expr">
+                <paramtype>Expr &amp;</paramtype>
+                <description>
+                  <para>The current expression </para>
+                </description>
+              </parameter>
+              <parameter name="context">
+                <paramtype>Context &amp;</paramtype>
+                <description>
+                  <para>The evaluation context </para>
+                </description>
+              </parameter>
+            <description>
+              <itemizedlist>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> corresponds to a unary prefix operator,
+                    then return
+ <programlisting>OP <functionname>proto::eval</functionname>(<functionname>proto::child</functionname>(expr), context)</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> corresponds to a unary postfix operator,
+                    then return
+ <programlisting><functionname>proto::eval</functionname>(<functionname>proto::child</functionname>(expr), context) OP</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> corresponds to a binary infix operator,
+                    then return
+ <programlisting><functionname>proto::eval</functionname>(<functionname>proto::left</functionname>(expr), context) OP +<functionname>proto::eval</functionname>(<functionname>proto::right</functionname>(expr), context)</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                <para>
+ If <computeroutput>Tag</computeroutput> is <computeroutput>
+                    <classname>proto::tag::subscript</classname>
+                  </computeroutput>,
+                  then return
+ <programlisting><functionname>proto::eval</functionname>(<functionname>proto::left</functionname>(expr), context) [ +<functionname>proto::eval</functionname>(<functionname>proto::right</functionname>(expr), context) ]</programlisting>
+                </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> is <computeroutput>
+                      <classname>proto::tag::if_else_</classname>
+                    </computeroutput>,
+                    then return
+ <programlisting><functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;0&gt;(expr), context) ? +<functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;1&gt;(expr), context) : +<functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;2&gt;(expr), context)</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> is <computeroutput>
+                      <classname>proto::tag::function</classname>
+                    </computeroutput>,
+                    then return
+ <programlisting><functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;0&gt;(expr), context) ( +<functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;1&gt;(expr), context),
+...
+<functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;N&gt;(expr), context) )</programlisting>
+                  </para>
+                </listitem>
+              </itemizedlist>
+            </description>
+            </method>
+          </method-group>
+        </struct>
+
+        <struct name="default_context">
+ <purpose>An evaluation context that gives the operators their normal C++ semantics.</purpose>
+          <description>
+ <para>An evaluation context that gives the operators their normal C++ semantics.</para>
+          </description>
+          <struct name="eval">
+            <template>
+              <template-type-parameter name="Expr"/>
+              <template-type-parameter name="ThisContext">
+                <default>default_context const</default>
+              </template-type-parameter>
+            </template>
+ <inherit><classname>proto::context::default_eval</classname>&lt; Expr, ThisContext &gt;</inherit>
+          </struct>
+        </struct>
+      </namespace>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/context/null.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/context/null.hpp">
+  <para>
+    Definintion of
+ <computeroutput><classname alt="boost::proto::context::null_context">proto::context::null_context&lt;&gt;</classname></computeroutput>,
+    an evaluation context for
+ <computeroutput><functionname alt="boost::proto::eval">proto::eval()</functionname></computeroutput> + that simply evaluates each child expression, doesn't combine the results at all, and returns void.
+  </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="context">
+        <struct name="null_eval">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="Context"/>
+          </template>
+          <typedef name="result_type">
+            <type>void</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>void</type>
+              <parameter name="expr">
+                <paramtype>Expr &amp;</paramtype>
+              </parameter>
+              <parameter name="context">
+                <paramtype>Context &amp;</paramtype>
+              </parameter>
+              <description>
+                <para>
+ For <computeroutput>N</computeroutput> in <computeroutput>[0,Expr arity)</computeroutput>,
+                  evaluate:
+ <programlisting><functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;N&gt;(expr), context)</programlisting>
+                </para>
+              </description>
+            </method>
+          </method-group>
+        </struct>
+
+        <struct name="null_context">
+ <purpose>An evaluation context for <functionname alt="proto::eval">proto::eval()</functionname> that simply evaluates + each child expression, doesn't combine the results at all, and returns void.</purpose>
+          <struct name="eval">
+            <template>
+              <template-type-parameter name="Expr"/>
+              <template-type-parameter name="ThisContext">
+                <default>null_context const</default>
+              </template-type-parameter>
+            </template>
+ <inherit><classname>proto::context::null_eval</classname>&lt; Expr, ThisContext &gt;</inherit>
+          </struct>
+        </struct>
+      </namespace>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/core.xml    Mon Nov 30 05:58:26 2009
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/core.hpp">
+ <para>Includes all of Proto, except the contexts, transforms, debug utilities and Boost.Typeof registrations.</para>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/debug.xml   Mon Nov 30 05:58:26 2009
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/debug.hpp">
+  <para>Utilities for debugging Proto expression trees </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="functional">
+
+        <!-- proto::functional::display_expr -->
+        <struct name="display_expr">
+          <purpose>Pretty-print a Proto expression tree. </purpose>
+          <description>
+            <para>
+ A <conceptname>PolymorphicFunctionObject</conceptname> which accepts a Proto expression tree and pretty-prints it to an <computeroutput>ostream</computeroutput> for debugging purposes.
+            </para>
+          </description>
+
+          <typedef name="result_type">
+            <type>void</type>
+          </typedef>
+
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>void</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr const &amp;</paramtype>
+              </parameter>
+            </method>
+          </method-group>
+
+          <constructor>
+ <parameter name="sout"><paramtype>std::ostream &amp;</paramtype><default>std::cout</default>
+              <description>
+                <para>
+ The <computeroutput>ostream</computeroutput> to which the expression tree will be written.
+                </para>
+              </description>
+            </parameter>
+            <parameter name="depth">
+              <paramtype>int</paramtype>
+              <default>0</default>
+              <description>
+                <para>
+ The starting indentation depth for this node. Children nodes will be displayed at a starting depth of <computeroutput>depth+4</computeroutput>.
+                </para>
+              </description>
+            </parameter>
+          </constructor>
+        </struct>
+
+      </namespace>
+
+      <!-- proto::display_expr -->
+      <overloaded-function name="display_expr">
+
+        <signature>
+          <type>void</type>
+          <template>
+            <template-type-parameter name="Expr"/>
+          </template>
+          <parameter name="expr">
+            <paramtype>Expr const &amp;</paramtype>
+            <description>
+              <para>The Proto expression tree to pretty-print </para>
+            </description>
+          </parameter>
+          <parameter name="sout">
+            <paramtype>std::ostream &amp;</paramtype>
+            <description>
+              <para>
+ The <computeroutput>ostream</computeroutput> to which the output should be written. If not specified, defaults to <computeroutput>std::cout</computeroutput>.
+              </para>
+            </description>
+          </parameter>
+        </signature>
+
+        <signature>
+          <type>void</type>
+          <template>
+            <template-type-parameter name="Expr"/>
+          </template>
+          <parameter name="expr">
+            <paramtype>Expr const &amp;</paramtype>
+          </parameter>
+        </signature>
+        <purpose>Pretty-print a Proto expression tree. </purpose>
+        <notes>
+          <para>
+ Equivalent to <computeroutput><classname alt="boost::proto::functional::display_expr">proto::functional::display_expr</classname>(0, sout)(expr)</computeroutput>.
+          </para>
+        </notes>
+      </overloaded-function>
+
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/deep_copy.xml       Mon Nov 30 05:58:26 2009
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/deep_copy.hpp">
+ <para>Replace all nodes stored by reference by nodes stored by value.</para>
+  <namespace name="boost">
+    <namespace name="proto">
+
+      <namespace name="result_of">
+        <!-- proto::result_of::deep_copy -->
+        <struct name="deep_copy">
+          <template>
+            <template-type-parameter name="Expr"/>
+          </template>
+ <purpose>A metafunction for calculating the return type of <computeroutput> + <functionname alt="proto::deep_copy">proto::deep_copy()</functionname></computeroutput>.</purpose>
+          <description>
+            <para>
+ A metafunction for calculating the return type of <computeroutput> + <functionname alt="proto::deep_copy">proto::deep_copy()</functionname></computeroutput>. The type + parameter <computeroutput>Expr</computeroutput> should be the type of a Proto expression tree. + It should not be a reference type, nor should it be cv-qualified.
+            </para>
+          </description>
+          <typedef name="type">
+            <type><emphasis>unspecified</emphasis></type>
+          </typedef>
+        </struct>
+      </namespace>
+
+      <namespace name="functional">
+        <!-- proto::functional::deep_copy -->
+        <struct name="deep_copy">
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+ <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type for deep-copying Proto
+            expression trees.</purpose>
+          <description>
+            <para>
+ A <conceptname>PolymorphicFunctionObject</conceptname> type for deep-copying Proto expression trees. + When a tree is deep-copied, all internal nodes and terminals held by reference are instead held by value. + The only exception is function references, which continue to be held by reference.
+            </para>
+          </description>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <specialization>
+              <template-arg>This(Expr)</template-arg>
+            </specialization>
+            <inherit>
+ <type><classname>result_of::deep_copy</classname>&lt;Expr&gt;</type>
+            </inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type><classname>result_of::deep_copy</classname>&lt;Expr&gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr const &amp;</paramtype>
+              </parameter>
+ <purpose>Deep-copies a Proto expression tree, turning all nodes and terminals held by
+                reference into ones held by value.</purpose>
+            </method>
+          </method-group>
+        </struct>
+      </namespace>
+
+      <!-- proto::deep_copy() -->
+      <function name="deep_copy">
+ <type>typename <classname>proto::result_of::deep_copy</classname>&lt;Expr&gt;::type</type>
+        <template>
+          <template-type-parameter name="Expr"/>
+        </template>
+        <parameter name="expr">
+          <paramtype>Expr const &amp;</paramtype>
+        </parameter>
+ <purpose>A function for deep-copying Proto expression trees. </purpose>
+        <description>
+          <para>
+ A function for deep-copying Proto expression trees. When a tree is deep-copied, all internal + nodes and terminals held by reference are instead held by value.</para>
+        </description>
+        <notes>
+          <para>
+            Terminals of reference-to-function type are left unchanged.
+          </para>
+          <para>
+ Equivalent to <computeroutput><classname>proto::functional::deep_copy</classname>()(expr)
+            </computeroutput>.
+          </para>
+        </notes>
+      </function>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/domain.xml  Mon Nov 30 05:58:26 2009
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/domain.hpp">
+  <para>
+ Contains definition of <computeroutput><classname alt="boost::proto::domain">proto::domain&lt;&gt;</classname> + </computeroutput> class template and helpers for defining domains with a generator and a grammar for controlling
+    operator overloading.
+  </para>
+  <namespace name="boost">
+    <namespace name="proto">
+
+      <!-- proto::domain<> -->
+      <struct name="domain">
+        <template>
+          <template-type-parameter name="Generator">
+ <default><classname>proto::default_generator</classname></default>
+          </template-type-parameter>
+          <template-type-parameter name="Grammar">
+            <default><classname>proto::_</classname></default>
+          </template-type-parameter>
+        </template>
+        <inherit><type>Generator</type></inherit>
+ <purpose>For use in defining domain tags to be used with <computeroutput> + <classname alt="proto::extends">proto::extends&lt;&gt;</classname></computeroutput>. A + <emphasis>domain</emphasis> associates an expression type with a <emphasis>generator</emphasis>,
+          and optionally a <emphasis>grammar</emphasis>.
+        </purpose>
+        <description>
+          <para>
+ The Generator determines how new expressions in the domain are constructed. Typically, a generator + wraps all new expressions in a wrapper that imparts domain-specific behaviors to expressions within + its domain. (See <computeroutput><classname alt="proto::extends">proto::extends&lt;&gt;</classname></computeroutput>.)
+          </para>
+          <para>
+ The Grammar determines whether a given expression is valid within the domain, and automatically + disables any operator overloads which would cause an invalid expression to be created. By default, + the Grammar parameter defaults to the wildcard, <computeroutput><classname>proto::_</classname> + </computeroutput>, which makes all expressions valid within the domain.
+          </para>
+          <para>
+            Example: <programlisting> template&lt;typename Expr&gt;
+ struct MyExpr;
+
+ struct MyGrammar
+ : <classname>proto::or_</classname>&lt; <classname>proto::terminal</classname>&lt;_&gt;, <classname>proto::plus</classname>&lt;MyGrammar, MyGrammar&gt; &gt;
+ {};
+
+ // Define MyDomain, in which all expressions are
+ // wrapped in MyExpr&lt;&gt; and only expressions that
+ // conform to MyGrammar are allowed.
+ struct MyDomain
+ : <classname>proto::domain</classname>&lt;<classname>proto::generator</classname>&lt;MyExpr&gt;, MyGrammar&gt;
+ {};
+
+ // Use MyDomain to define MyExpr
+ template&lt;typename Expr&gt;
+ struct MyExpr
+ : <classname>proto::extends</classname>&lt;Expr, MyExpr&lt;Expr&gt;, MyDomain&gt;
+ {
+     // ...
+ };
+            </programlisting>
+          </para>
+        </description>
+        <typedef name="proto_grammar">
+          <type>Grammar</type>
+        </typedef>
+      </struct>
+
+      <!-- proto::default_domain -->
+      <struct name="default_domain">
+        <inherit><classname>proto::domain</classname>&lt;&gt;</inherit>
+ <purpose>The domain expressions have by default, if <computeroutput> + <classname alt="proto::extends">proto::extends&lt;&gt;</classname></computeroutput> has not been used
+          to associate a domain with an expression.</purpose>
+      </struct>
+
+      <!-- proto::deduce_domain -->
+      <struct name="deduce_domain">
+ <purpose>A pseudo-domain for use in functions and metafunctions that require a domain parameter. + It indicates that the domain of the parent node should be inferred from the domains of the child nodes.</purpose>
+      </struct>
+
+      <!-- proto::is_domain -->
+      <struct name="is_domain">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+        <inherit>
+ <type>mpl::bool_&lt; <replaceable>true-or-false</replaceable> &gt;</type>
+        </inherit>
+        <description>
+          <para>
+ A metafunction that returns <computeroutput>mpl::true_</computeroutput> if the type + <computeroutput>T</computeroutput> is the type of a Proto domain; + <computeroutput>mpl::false_</computeroutput> otherwise. If <computeroutput>T</computeroutput> + inherits from <computeroutput><classname alt="proto::domain">proto::domain&lt;&gt;</classname></computeroutput>, + <computeroutput>is_domain&lt;T&gt;</computeroutput> is <computeroutput>mpl::true_</computeroutput>.
+          </para>
+        </description>
+      </struct>
+
+      <!-- proto::domain_of -->
+      <struct name="domain_of">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+        <description>
+          <para>
+ A metafunction that returns the domain of a given type. If <computeroutput>T</computeroutput> is a Proto + expression type, it returns that expression's associated domain. If not, it returns + <computeroutput><classname>proto::default_domain</classname></computeroutput>.
+          </para>
+        </description>
+        <typedef name="type">
+          <type><replaceable>domain-of-T</replaceable></type>
+        </typedef>
+      </struct>
+
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/eval.xml    Mon Nov 30 05:58:26 2009
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/eval.hpp">
+  <para>
+    Contains the
+    <computeroutput>
+      <functionname alt="boost::proto::eval">proto::eval()</functionname>
+    </computeroutput> expression evaluator.
+  </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="functional">
+        <!-- proto::functional::eval-->
+        <struct name="eval">
+ <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type for evaluating a given Proto
+            expression with a given context.</purpose>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Expr"/>
+              <template-type-parameter name="Context"/>
+            </template>
+            <specialization>
+              <template-arg>This(Expr, Context)</template-arg>
+            </specialization>
+            <inherit>
+              <type>
+    <classname>proto::result_of::eval</classname>&lt;
+      typename boost::remove_reference&lt; Expr &gt;::type,
+      typename boost::remove_reference&lt; Context &gt;::type
+    &gt;</type>
+            </inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::eval</classname>&lt; Expr, Context &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+                <template-type-parameter name="Context"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr &amp;</paramtype>
+                <description>
+                  <para>The Proto expression to evaluate.</para>
+                </description>
+              </parameter>
+              <parameter name="context">
+                <paramtype>Context &amp;</paramtype>
+                <description>
+ <para>The context in which the expression should be evaluated. </para>
+                </description>
+              </parameter>
+ <purpose>Evaluate a given Proto expression with a given context. </purpose>
+              <returns>
+                <para>
+ <computeroutput>typename Context::template eval&lt;Expr&gt;()(expr, context)</computeroutput>
+                </para>
+              </returns>
+            </method>
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::eval</classname>&lt; Expr, Context &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+                <template-type-parameter name="Context"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr &amp;</paramtype>
+              </parameter>
+              <parameter name="context">
+                <paramtype>Context const &amp;</paramtype>
+              </parameter>
+              <description>
+                <para>
+ This is an overloaded member function, provided for convenience. It differs from the above
+                  function only in what argument(s) it accepts.
+                </para>
+              </description>
+            </method>
+          </method-group>
+        </struct>
+      </namespace>
+      <namespace name="result_of">
+        <!-- proto::result_of::eval -->
+        <struct name="eval">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="Context"/>
+          </template>
+ <purpose>A metafunction for calculating the return type of <computeroutput> + <functionname alt="proto::eval">proto::eval()</functionname></computeroutput> given a + certain <computeroutput>Expr</computeroutput> and <computeroutput>Context</computeroutput> types.</purpose>
+          <typedef name="type">
+ <type>typename Context::template eval&lt; Expr &gt;::result_type</type>
+          </typedef>
+        </struct>
+      </namespace>
+      <!-- proto::eval() -->
+      <overloaded-function name="eval">
+        <signature>
+ <type>typename <classname>proto::result_of::eval</classname>&lt; Expr, Context &gt;::type</type>
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="Context"/>
+          </template>
+          <parameter name="expr">
+            <paramtype>Expr &amp;</paramtype>
+            <description>
+              <para>The Proto expression to evaluate.</para>
+            </description>
+          </parameter>
+          <parameter name="context">
+            <paramtype>Context &amp;</paramtype>
+            <description>
+ <para>The context in which the expression should be evaluated.</para>
+            </description>
+          </parameter>
+        </signature>
+        <signature>
+ <type>typename <classname>proto::result_of::eval</classname>&lt; Expr, Context &gt;::type</type>
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="Context"/>
+          </template>
+          <parameter name="expr">
+            <paramtype>Expr &amp;</paramtype>
+          </parameter>
+          <parameter name="context">
+            <paramtype>Context const &amp;</paramtype>
+          </parameter>
+        </signature>
+ <purpose>Evaluate a given Proto expression with a given context. </purpose>
+        <returns>
+          <para>
+ <computeroutput>typename Context::template eval&lt;Expr&gt;()(expr, context)</computeroutput>
+          </para>
+        </returns>
+      </overloaded-function>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/expr.xml    Mon Nov 30 05:58:26 2009
@@ -0,0 +1,351 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/expr.hpp">
+  <namespace name="boost">
+    <namespace name="proto">
+
+      <!-- boost::proto::expr -->
+
+      <struct name="expr">
+        <template>
+          <template-type-parameter name="Tag"/>
+          <template-type-parameter name="Args"/>
+          <template-nontype-parameter name="Arity">
+            <type>long</type>
+            <default>Args::arity</default>
+          </template-nontype-parameter>
+        </template>
+
+        <purpose>Representation of a node in an expression tree.</purpose>
+
+        <description>
+          <para>
+ <computeroutput>proto::expr&lt;&gt;</computeroutput> is a node in an expression + template tree. It is a container for its child sub-trees. It also serves as the
+            terminal nodes of the tree.
+          </para>
+          <para>
+ <computeroutput>Tag</computeroutput> is type that represents the operation + encoded by this expression. It is typically one of the structs in the + <computeroutput>boost::proto::tag</computeroutput> namespace, but it doesn't + have to be. If <computeroutput>Arity</computeroutput> is 0 then this + <computeroutput>expr&lt;&gt;</computeroutput> type represents a leaf in the
+            expression tree.
+          </para>
+          <para>
+ <computeroutput>Args</computeroutput> is a list of types representing + the children of this expression. It is an instantiation of one of + <computeroutput><classname alt="proto::listN">proto::list1&lt;&gt;</classname></computeroutput>, + <computeroutput><classname alt="proto::listN">proto::list2&lt;&gt;</classname></computeroutput>,
+            etc. The child types
+ must all themselves be either <computeroutput>proto::expr&lt;&gt;</computeroutput> + or <computeroutput>proto::expr&lt;&gt;&amp;</computeroutput> (or extensions thereof via + <computeroutput><classname>proto::extends&lt;&gt;</classname></computeroutput> or + <computeroutput><macroname>BOOST_PROTO_EXTENDS</macroname>()</computeroutput>), unless
+            <computeroutput>Arity</computeroutput> is 0, in which case
+            <computeroutput>Args</computeroutput> must be
+            <computeroutput>proto::term&lt;T&gt;</computeroutput>, where
+            <computeroutput>T</computeroutput> can be any type.
+          </para>
+          <para>
+ <computeroutput>proto::expr&lt;&gt;</computeroutput> is a valid Fusion + random-access sequence, where the elements of the sequence are the child
+            expressions.
+          </para>
+        </description>
+
+        <!-- typedefs -->
+
+        <typedef name="proto_tag">
+          <type>Tag</type>
+        </typedef>
+
+        <typedef name="proto_args">
+          <type>Args</type>
+        </typedef>
+
+        <typedef name="proto_arity">
+          <type>mpl::long_&lt; Arity &gt;</type>
+        </typedef>
+
+        <typedef name="proto_domain">
+          <type><classname>proto::default_domain</classname></type>
+        </typedef>
+
+        <typedef name="proto_base_expr">
+          <type>expr</type>
+        </typedef>
+
+        <typedef name="proto_derived_expr">
+          <type>expr</type>
+        </typedef>
+
+        <typedef name="proto_childN">
+          <type>typename Args::child<replaceable>N</replaceable></type>
+ <purpose>For each <replaceable>N</replaceable> in <replaceable>[0,max(Arity,1))</replaceable>.</purpose>
+        </typedef>
+
+        <struct name="result">
+          <template>
+            <template-type-parameter name="Signature"/>
+          </template>
+          <description>
+            <para>
+ Encodes the return type of <computeroutput><classname>proto::expr&lt;&gt;</classname>::operator()</computeroutput>. + Makes <computeroutput><classname>proto::expr&lt;&gt;</classname></computeroutput> a TR1-style function object type + usable with <computeroutput>boost::result_of&lt;&gt;</computeroutput>
+            </para>
+          </description>
+          <typedef name="type">
+            <type><replaceable>unspecified</replaceable></type>
+          </typedef>
+        </struct>
+
+        <method-group name="public static functions">
+
+          <!-- make -->
+          <method name="make" specifiers="static">
+            <type>expr const</type>
+            <template>
+              <template-type-parameter name="A" pack="1"/>
+            </template>
+            <parameter name="a" pack="1">
+              <paramtype>A const &amp;</paramtype>
+            </parameter>
+            <requires>
+              <para>
+ The number of supplied arguments must be <computeroutput>max(Arity,1)</computeroutput>.
+              </para>
+            </requires>
+            <returns>
+              <para>
+ A new <computeroutput>expr</computeroutput> object initialized with the specified arguments.
+              </para>
+            </returns>
+          </method>
+
+        </method-group>
+
+        <method-group name="public member functions">
+
+          <method name="proto_base">
+            <type>expr &amp;</type>
+ <returns><para><computeroutput>*this</computeroutput></para></returns>
+          </method>
+
+          <method name="proto_base" cv="const">
+            <type>expr const &amp;</type>
+            <description>
+ <para>This is an overloaded member function, provided for convenience. It differs from + the above function only in what argument(s) it accepts.</para>
+            </description>
+          </method>
+
+          <!-- operator= -->
+          <method name="operator=">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>Lazy assignment expression</para>
+            </description>
+            <returns>
+ <para>A new expression node representing the assignment operation.</para>
+            </returns>
+          </method>
+
+          <method name="operator=">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A const &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>
+ This is an overloaded member function, provided for convenience. It differs from
+                the above function only in what argument(s) it accepts.
+              </para>
+            </description>
+          </method>
+
+          <method name="operator=" cv="const">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>
+ This is an overloaded member function, provided for convenience. It differs from
+                the above function only in what argument(s) it accepts.
+              </para>
+            </description>
+          </method>
+
+          <method name="operator=" cv="const">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A const &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>
+ This is an overloaded member function, provided for convenience. It differs from
+                the above function only in what argument(s) it accepts.
+              </para>
+            </description>
+          </method>
+
+          <!-- operator[] -->
+          <method name="operator[]">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>Lazy subscript expression</para>
+            </description>
+            <returns>
+ <para>A new expression node representing the subscript operation.</para>
+            </returns>
+          </method>
+
+          <method name="operator[]">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A const &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>
+ This is an overloaded member function, provided for convenience. It differs from
+                the above function only in what argument(s) it accepts.
+              </para>
+            </description>
+          </method>
+
+          <method name="operator[]" cv="const">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>
+ This is an overloaded member function, provided for convenience. It differs from
+                the above function only in what argument(s) it accepts.
+              </para>
+            </description>
+          </method>
+
+          <method name="operator[]" cv="const">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A const &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>
+ This is an overloaded member function, provided for convenience. It differs from
+                the above function only in what argument(s) it accepts.
+              </para>
+            </description>
+          </method>
+
+          <!-- operator() -->
+          <method name="operator()">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A" pack="1"/>
+            </template>
+            <parameter name="a" pack="1">
+              <paramtype>A const &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>Lazy function call</para>
+            </description>
+            <returns>
+ <para>A new expression node representing the function call operation.</para>
+            </returns>
+          </method>
+
+          <method name="operator()" cv="const">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A" pack="1"/>
+            </template>
+            <parameter name="a" pack="1">
+              <paramtype>A const &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>
+ This is an overloaded member function, provided for convenience. It differs from
+                the above function only in what argument(s) it accepts.
+              </para>
+            </description>
+          </method>
+
+        </method-group>
+
+        <data-member name="childN">
+          <type>proto_child<replaceable>N</replaceable></type>
+ <purpose>For each <replaceable>N</replaceable> in <replaceable>[0,max(Arity,1))</replaceable>.</purpose>
+        </data-member>
+
+        <data-member name="proto_arity_c" specifiers="static">
+          <type>const long</type>
+          <purpose>
+            <computeroutput>= Arity;</computeroutput>
+          </purpose>
+        </data-member>
+
+      </struct>
+
+      <!-- proto::unexpr -->
+      <struct name="unexpr">
+        <template>
+          <template-type-parameter name="Expr"/>
+        </template>
+ <purpose>Lets you inherit the interface of an expression while hiding from Proto the fact that
+          the type is a Proto expression.</purpose>
+        <inherit><type>Expr</type></inherit>
+        <method-group name="public member functions"/>
+        <constructor>
+          <parameter name="expr">
+            <paramtype>Expr const &amp;</paramtype>
+          </parameter>
+        </constructor>
+        <description>
+          <para>
+            For an expression type <computeroutput>E</computeroutput>,
+            <computeroutput>
+              <classname>proto::is_expr</classname>&lt;E&gt;::value
+            </computeroutput> is <computeroutput>true</computeroutput>, but
+            <computeroutput>
+ <classname>proto::is_expr</classname>&lt;proto::unexpr&lt;E&gt; &gt;::value
+            </computeroutput> is <computeroutput>false</computeroutput>.
+          </para>
+        </description>
+      </struct>
+
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/extends.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,548 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/extends.hpp">
+ <para>Macros and a base class for defining end-user expression types </para>
+  <namespace name="boost">
+    <namespace name="proto">
+
+      <!-- proto::is_proto_expr -->
+      <struct name="is_proto_expr">
+ <purpose>Empty type to be used as a dummy template parameter of POD expression wrappers. It allows + argument-dependent lookup to find Proto's operator overloads.</purpose>
+        <description>
+          <para>
+ <computeroutput>proto::is_proto_expr</computeroutput> allows argument-dependent lookup to find Proto's operator overloads. For example:
+          </para>
+          <para>
+ <programlisting> template&lt;typename T, typename Dummy = <classname>proto::is_proto_expr</classname>&gt;
+ struct my_terminal
+ {
+     <macroname>BOOST_PROTO_BASIC_EXTENDS</macroname>(
+         typename <classname>proto::terminal</classname>&lt;T&gt;::type
+       , my_terminal&lt;T&gt;
+       , <classname>proto::default_domain</classname>
+     )
+ };
+
+ // ...
+ my_terminal&lt;int&gt; _1, _2;
+ _1 + _2; // OK, uses proto::operator+</programlisting>
+          </para>
+          <para>
+ Without the second <computeroutput>Dummy</computeroutput> template parameter, Proto's operator overloads
+            would not be considered by name lookup.
+          </para>
+        </description>
+      </struct>
+
+      <!-- proto::extends -->
+      <struct name="extends">
+        <template>
+          <template-type-parameter name="Expr"/>
+          <template-type-parameter name="Derived"/>
+          <template-type-parameter name="Domain">
+            <default><classname>proto::default_domain</classname></default>
+          </template-type-parameter>
+        </template>
+ <purpose>For adding behaviors to a Proto expression template.</purpose>
+        <description>
+          <para>
+ Use <computeroutput>proto::extends&lt;&gt;</computeroutput> to give expressions in your
+            domain custom data members and member functions.
+          </para>
+          <para>
+ Conceptually, using <computeroutput>proto::extends&lt;&gt;</computeroutput> is akin + to inheriting from <computeroutput><classname>proto::expr</classname>&lt;&gt;</computeroutput> + and adding your own members. Using <computeroutput>proto::extends&lt;&gt;</computeroutput> is + generally preferrable to straight inheritance because the members that would be inherited from + <computeroutput><classname>proto::expr</classname>&lt;&gt;</computeroutput> would + be wrong; they would incorrectly slice off your additional members when building + larger expressions from smaller ones. <computeroutput>proto::extends&lt;&gt;</computeroutput> + automatically gives your expression types the appropriate operator overloads that + preserve your domain-specific members when composing expression trees.
+          </para>
+          <para>
+            Expression extensions are typically defined as follows:
+          </para>
+          <para>
+            <programlisting>template&lt; typename Expr &gt;
+struct my_expr
+  : proto::extends&lt;
+        Expr            // The expression type we're extending
+      , my_expr&lt; Expr &gt; // The type we're defining
+ , my_domain // The domain associated with this expression extension
+    &gt;
+{
+ typedef proto::extends&lt; Expr, my_expr&lt; Expr &gt;, my_domain &gt; base_type;
+
+    // An expression extension is constructed from the expression
+    // it is extending.
+    my_expr( Expr const &amp; e = Expr() )
+      : base_type( e )
+    {}
+
+    // Unhide proto::extends::operator=
+    // (This is only necessary if a lazy assignment operator
+    // makes sense for your domain-specific language.)
+    using base_type::operator=;
+
+    /*
+    ... domain-specific members go here ...
+    */
+};</programlisting>
+          </para>
+          <para>
+            See also:
+            <itemizedlist>
+              <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS</macroname>()</computeroutput>
+              </listitem>
+            </itemizedlist>
+          </para>
+        </description>
+        <struct name="result">
+          <template>
+            <template-type-parameter name="Signature"/>
+          </template>
+          <typedef name="type">
+            <type><replaceable>unspecified</replaceable></type>
+          </typedef>
+          <description>
+ <para>So that <computeroutput>boost::result_of&lt;&gt;</computeroutput> + can compute the return type of <computeroutput>proto::extends::operator()</computeroutput>.
+          </para>
+          </description>
+        </struct>
+        <typedef name="proto_base_expr">
+          <type>typename Expr::proto_base_expr</type>
+        </typedef>
+        <typedef name="proto_domain">
+          <type>Domain</type>
+        </typedef>
+        <typedef name="proto_derived_expr">
+          <type>Derived</type>
+        </typedef>
+        <typedef name="proto_tag">
+          <type>typename proto_base_expr::proto_tag</type>
+        </typedef>
+        <typedef name="proto_args">
+          <type>typename proto_base_expr::proto_args</type>
+        </typedef>
+        <typedef name="proto_arity">
+          <type>typename proto_base_expr::proto_arity</type>
+        </typedef>
+        <typedef name="proto_childN">
+ <purpose>For each <replaceable>N</replaceable> in <replaceable>[0,max(1,proto_arity_c))</replaceable></purpose> + <type>typename proto_base_expr::proto_child<replaceable>N</replaceable></type>
+        </typedef>
+
+        <!-- constructors -->
+        <constructor/>
+        <constructor>
+          <parameter name="that">
+ <paramtype><classname>extends</classname> const &amp;</paramtype>
+          </parameter>
+        </constructor>
+        <constructor>
+          <parameter name="expr_">
+            <paramtype>Expr const &amp;</paramtype>
+          </parameter>
+        </constructor>
+
+        <method-group name="public static functions">
+          <method name="make" specifiers="static">
+            <type>Derived const</type>
+            <parameter name="expr">
+              <paramtype>Expr const &amp;</paramtype>
+            </parameter>
+            <description>
+ <para>Construct an expression extension from the base expression.</para>
+            </description>
+            <return>Derived(expr)</return>
+          </method>
+        </method-group>
+
+        <method-group name="public member functions">
+
+          <!-- proto_base() -->
+          <method name="proto_base">
+            <type>proto_base_expr &amp;</type>
+ <returns><computeroutput>proto_expr_.proto_base()</computeroutput></returns>
+            <throws><simpara>Will not throw.</simpara></throws>
+          </method>
+          <method name="proto_base" cv="const">
+            <type>proto_base_expr const &amp;</type>
+ <returns><computeroutput>proto_expr_.proto_base()</computeroutput></returns>
+            <throws><simpara>Will not throw.</simpara></throws>
+          </method>
+
+          <!-- operator= -->
+          <method name="operator=">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>Lazy assignment expression</para>
+            </description>
+            <returns>
+ <para>A new expression node representing the assignment operation.</para>
+            </returns>
+          </method>
+
+          <method name="operator=">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A const &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>
+ This is an overloaded member function, provided for convenience. It differs from
+                the above function only in what argument(s) it accepts.
+              </para>
+            </description>
+          </method>
+
+          <method name="operator=" cv="const">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>
+ This is an overloaded member function, provided for convenience. It differs from
+                the above function only in what argument(s) it accepts.
+              </para>
+            </description>
+          </method>
+
+          <method name="operator=" cv="const">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A const &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>
+ This is an overloaded member function, provided for convenience. It differs from
+                the above function only in what argument(s) it accepts.
+              </para>
+            </description>
+          </method>
+
+          <!-- operator[] -->
+          <method name="operator[]">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>Lazy subscript expression</para>
+            </description>
+            <returns>
+ <para>A new expression node representing the subscript operation.</para>
+            </returns>
+          </method>
+
+          <method name="operator[]">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A const &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>
+ This is an overloaded member function, provided for convenience. It differs from
+                the above function only in what argument(s) it accepts.
+              </para>
+            </description>
+          </method>
+
+          <method name="operator[]" cv="const">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>
+ This is an overloaded member function, provided for convenience. It differs from
+                the above function only in what argument(s) it accepts.
+              </para>
+            </description>
+          </method>
+
+          <method name="operator[]" cv="const">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A"/>
+            </template>
+            <parameter name="a">
+              <paramtype>A const &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>
+ This is an overloaded member function, provided for convenience. It differs from
+                the above function only in what argument(s) it accepts.
+              </para>
+            </description>
+          </method>
+
+          <!-- operator() -->
+          <method name="operator()">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A" pack="1"/>
+            </template>
+            <parameter name="a" pack="1">
+              <paramtype>A const &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>Lazy function call</para>
+            </description>
+            <returns>
+ <para>A new expression node representing the function call operation.</para>
+            </returns>
+          </method>
+
+          <method name="operator()" cv="const">
+            <type><replaceable>unspecified</replaceable></type>
+            <template>
+              <template-type-parameter name="A" pack="1"/>
+            </template>
+            <parameter name="a" pack="1">
+              <paramtype>A const &amp;</paramtype>
+            </parameter>
+            <description>
+              <para>
+ This is an overloaded member function, provided for convenience. It differs from
+                the above function only in what argument(s) it accepts.
+              </para>
+            </description>
+          </method>
+        </method-group>
+
+        <data-member name="proto_expr_">
+          <type>Expr</type>
+          <purpose>For exposition only.</purpose>
+        </data-member>
+
+        <data-member name="proto_arity_c" specifiers="static">
+          <type>const long</type>
+ <purpose><computeroutput>= proto_base_expr::proto_arity_c;</computeroutput></purpose>
+        </data-member>
+
+      </struct>
+
+    </namespace>
+  </namespace>
+
+  <macro name="BOOST_PROTO_BASIC_EXTENDS" kind="functionlike">
+    <macro-parameter name="Expr"/>
+    <macro-parameter name="Derived"/>
+    <macro-parameter name="Domain"/>
+ <purpose>For creating expression wrappers that add members to a Proto expression template, like + <computeroutput><classname alt="boost::proto::extends">proto::extends&lt;&gt;</classname></computeroutput>,
+      but while retaining POD-ness of the expression wrapper.</purpose>
+    <description>
+      <para>
+ <computeroutput>BOOST_PROTO_BASIC_EXTENDS()</computeroutput> adds the basic typedefs, member functions, and + data members necessary to make a struct a valid Proto expression extension. It does <emphasis>not</emphasis> + add any constructors, virtual functions or access control blocks that would render the containing
+        struct non-POD.
+      </para>
+      <para>
+ <computeroutput>Expr</computeroutput> is the Proto expression that the enclosing struct extends. + <computeroutput>Derived</computeroutput> is the type of the enclosing struct. + <computeroutput>Domain</computeroutput> is the Proto domain to which this expression extension belongs. + (See <computeroutput><classname alt="boost::proto::domain">proto::domain&lt;&gt;</classname></computeroutput>.)
+      </para>
+ <para><computeroutput>BOOST_PROTO_BASIC_EXTENDS()</computeroutput> adds to its enclosing struct + exactly one data member of type <computeroutput>Expr</computeroutput>.
+      </para>
+      <para>
+ <emphasis role="bold">Example:</emphasis><programlisting>template&lt; class Expr &gt;
+struct my_expr;
+
+struct my_domain
+ : <classname alt="boost::proto::domain">proto::domain</classname>&lt; <classname alt="boost::proto::pod_generator">proto::pod_generator</classname>&lt; my_expr &gt; &gt;
+{};
+
+template&lt; class Expr &gt;
+struct my_expr
+{
+    // OK, this makes my_expr&lt;&gt; a valid Proto expression extension.
+    // my_expr&lt;&gt; does /not/ have overloaded assignment, subscript,
+ // and function call operators that build expression templates, however. + <macroname>BOOST_PROTO_BASIC_EXTENDS</macroname>(Expr, my_expr, my_domain)
+};
+
+// OK, my_expr&lt;&gt; is POD, so this is statically initialized:
+my_expr&lt; <classname alt="boost::proto::terminal">proto::terminal</classname>&lt;int&gt;::type &gt; const _1 = {{1}};</programlisting>
+      </para>
+      <para>
+        See also:
+        <itemizedlist>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_ASSIGN</macroname>()</computeroutput>
+          </listitem>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_SUBSCRIPT</macroname>()</computeroutput>
+          </listitem>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_FUNCTION</macroname>()</computeroutput>
+          </listitem>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS</macroname>()</computeroutput>
+          </listitem>
+        </itemizedlist>
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_EXTENDS_ASSIGN" kind="functionlike">
+ <purpose>For adding to an expression extension class an overloaded assignment operator that
+      builds an expression template.</purpose>
+    <description>
+      <para>
+ Use <computeroutput>BOOST_PROTO_EXTENDS_ASSIGN()</computeroutput> after <computeroutput> + <macroname>BOOST_PROTO_BASIC_EXTENDS</macroname>()</computeroutput> to give an expression + extension class an overloaded assignment operator that builds an expression template.
+      </para>
+      <para>
+        See also:
+        <itemizedlist>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_BASIC_EXTENDS</macroname>()</computeroutput>
+          </listitem>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_SUBSCRIPT</macroname>()</computeroutput>
+          </listitem>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_FUNCTION</macroname>()</computeroutput>
+          </listitem>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS</macroname>()</computeroutput>
+          </listitem>
+        </itemizedlist>
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_EXTENDS_SUBSCRIPT" kind="functionlike">
+ <purpose>For adding to an expression extension class an overloaded subscript operator that
+      builds an expression template.</purpose>
+    <description>
+      <para>
+ Use <computeroutput>BOOST_PROTO_EXTENDS_SUBSCRIPT()</computeroutput> after <computeroutput> + <macroname>BOOST_PROTO_BASIC_EXTENDS</macroname>()</computeroutput> to give an expression + extension class an overloaded subscript operator that builds an expression template.
+      </para>
+      <para>
+        See also:
+        <itemizedlist>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_BASIC_EXTENDS</macroname>()</computeroutput>
+          </listitem>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_ASSIGN</macroname>()</computeroutput>
+          </listitem>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_FUNCTION</macroname>()</computeroutput>
+          </listitem>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS</macroname>()</computeroutput>
+          </listitem>
+        </itemizedlist>
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_EXTENDS_FUNCTION" kind="functionlike">
+ <purpose>For adding to an expression extension class a set of overloaded function call operators
+      that build expression templates.</purpose>
+    <description>
+      <para>
+ Use <computeroutput>BOOST_PROTO_EXTENDS_FUNCTION()</computeroutput> after <computeroutput> + <macroname>BOOST_PROTO_BASIC_EXTENDS</macroname>()</computeroutput> to give an expression + extension class a set of overloaded function call operators that build expression templates. + In addition, <computeroutput>BOOST_PROTO_EXTENDS_FUNCTION()</computeroutput> adds a nested + <computeroutput>result&lt;&gt;</computeroutput> class template that is a metafunction for + calculating the return type of the overloaded function call operators.
+      </para>
+      <para>
+        See also:
+        <itemizedlist>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_BASIC_EXTENDS</macroname>()</computeroutput>
+          </listitem>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_ASSIGN</macroname>()</computeroutput>
+          </listitem>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_SUBSCRIPT</macroname>()</computeroutput>
+          </listitem>
+          <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS</macroname>()</computeroutput>
+          </listitem>
+        </itemizedlist>
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_EXTENDS" kind="functionlike">
+    <macro-parameter name="Expr"/>
+    <macro-parameter name="Derived"/>
+    <macro-parameter name="Domain"/>
+ <purpose>For creating expression wrappers that add behaviors to a Proto expression template, like + <computeroutput><classname alt="boost::proto::extends">proto::extends&lt;&gt;</classname></computeroutput>,
+      but while retaining POD-ness of the expression wrapper.</purpose>
+    <description>
+      <para>
+        Equivalent to:
+ <programlisting><macroname>BOOST_PROTO_BASIC_EXTENDS</macroname>(Expr, Derived, Domain)
+<macroname>BOOST_PROTO_EXTENDS_ASSIGN</macroname>()
+<macroname>BOOST_PROTO_EXTENDS_SUBSCRIPT</macroname>()
+<macroname>BOOST_PROTO_EXTENDS_FUNCTION</macroname>()</programlisting>
+      </para>
+      <para>
+ <emphasis role="bold">Example:</emphasis><programlisting>template&lt; class Expr &gt;
+struct my_expr;
+
+struct my_domain
+ : <classname alt="boost::proto::domain">proto::domain</classname>&lt; <classname alt="boost::proto::pod_generator">proto::pod_generator</classname>&lt; my_expr &gt; &gt;
+{};
+
+template&lt; class Expr &gt;
+struct my_expr
+{
+    // OK, this makes my_expr&lt;&gt; a valid Proto expression extension.
+    // my_expr&lt;&gt; has overloaded assignment, subscript,
+    // and function call operators that build expression templates.
+    <macroname>BOOST_PROTO_EXTENDS</macroname>(Expr, my_expr, my_domain)
+};
+
+// OK, my_expr&lt;&gt; is POD, so this is statically initialized:
+my_expr&lt; <classname alt="boost::proto::terminal">proto::terminal</classname>&lt;int&gt;::type &gt; const _1 = {{1}};</programlisting>
+      </para>
+    </description>
+  </macro>
+
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/fusion.xml  Mon Nov 30 05:58:26 2009
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/fusion.hpp">
+  <para>Make any Proto expression a valid Fusion sequence </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="functional">
+
+        <!-- proto::functional::flatten -->
+        <struct name="flatten">
+ <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that returns a "flattened"
+            view of a Proto expression tree. </purpose>
+          <description>
+            <para>
+ A <conceptname>PolymorphicFunctionObject</conceptname> type that returns a "flattened" view + of a Proto expression tree. For a tree with a top-most node tag of type + <computeroutput>T</computeroutput>, the elements of the flattened sequence are determined by + recursing into each child node with the same tag type and returning those nodes of different + type. So for instance, the Proto expression tree corresponding to the expression + <computeroutput>a | b | c</computeroutput> has a flattened view with elements [a, b, c], even + though the tree is grouped as <computeroutput>((a | b) | c)</computeroutput>.
+            </para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <specialization>
+              <template-arg>This(Expr)</template-arg>
+            </specialization>
+            <inherit>
+              <type>
+    <classname>proto::result_of::flatten</classname>&lt;
+      typename boost::remove_reference&lt; Expr &gt;::type
+    &gt;</type>
+            </inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::flatten</classname>&lt; Expr const &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr const &amp;</paramtype>
+              </parameter>
+            </method>
+          </method-group>
+        </struct>
+
+        <!-- proto::functional::pop_front -->
+        <struct name="pop_front">
+ <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the + <computeroutput>fusion::pop_front()</computeroutput> algorithm on its argument.</purpose>
+          <description>
+            <para>
+ A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the + <computeroutput>fusion::pop_front()</computeroutput> algorithm on its argument. This is + useful for defining a <conceptname>CallableTransform</conceptname> such as + <computeroutput>pop_front(_)</computeroutput>, which removes the first child from a Proto + expression node. Such a transform might be used as the first argument to the + <computeroutput><classname alt="proto::fold">proto::fold&lt;&gt;</classname></computeroutput>
+              transform; that is, fold all but the first child.
+            </para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <specialization>
+              <template-arg>This(Expr)</template-arg>
+            </specialization>
+            <inherit>
+              <type>
+    fusion::result_of::pop_front&lt;
+      typename boost::remove_reference&lt; Expr &gt;::type const
+    &gt;</type>
+            </inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename fusion::result_of::pop_front&lt; Expr const &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr const &amp;</paramtype>
+              </parameter>
+            </method>
+          </method-group>
+        </struct>
+
+        <!-- proto::functional::reverse -->
+        <struct name="reverse">
+ <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the + <computeroutput>fusion::reverse()</computeroutput> algorithm on its argument.
+          </purpose>
+          <description>
+            <para>
+ A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the + <computeroutput>fusion::reverse()</computeroutput> algorithm on its argument. This is + useful for defining a <conceptname>CallableTransform</conceptname> like + <computeroutput>reverse(_)</computeroutput>, which reverses the order of the children
+              of a Proto expression node.
+            </para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <specialization>
+              <template-arg>This(Expr)</template-arg>
+            </specialization>
+            <inherit>
+              <type>
+    fusion::result_of::reverse&lt;
+      typename boost::remove_reference&lt; Expr &gt;::type const
+    &gt;</type>
+            </inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename fusion::result_of::reverse&lt; Expr const &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr const &amp;</paramtype>
+              </parameter>
+            </method>
+          </method-group>
+        </struct>
+      </namespace>
+
+      <namespace name="result_of">
+        <!-- proto::result_of::flatten -->
+        <struct name="flatten">
+          <template>
+            <template-type-parameter name="Expr"/>
+          </template>
+ <purpose>Metafunction that computes the return type of <computeroutput> + <functionname alt="proto::flatten">proto::flatten()</functionname></computeroutput></purpose>
+          <typedef name="type">
+            <type><emphasis>unspecified</emphasis></type>
+          </typedef>
+        </struct>
+      </namespace>
+
+      <!-- proto::flatten() -->
+      <function name="flatten">
+ <type>typename <classname>proto::result_of::flatten</classname>&lt; Expr const &gt;::type</type>
+        <template>
+          <template-type-parameter name="Expr"/>
+        </template>
+        <parameter name="expr">
+          <paramtype>Expr const &amp;</paramtype>
+        </parameter>
+ <purpose>A function that returns a "flattened" view of a Proto expression tree. </purpose>
+        <description>
+          <para>
+ For a tree with a top-most node tag of type <computeroutput>T</computeroutput>, the elements + of the flattened sequence are determined by recursing into each child node with the same tag + type and returning those nodes of different type. So for instance, the Proto expression tree + corresponding to the expression <computeroutput>a | b | c</computeroutput> has a flattened + view with elements [a, b, c], even though the tree is grouped as
+            <computeroutput>((a | b) | c)</computeroutput>.
+          </para>
+        </description>
+      </function>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/generate.xml        Mon Nov 30 05:58:26 2009
@@ -0,0 +1,264 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/generate.hpp">
+ <para>Contains definition of <computeroutput><classname alt="boost::proto::generator">proto::generator&lt;&gt;</classname></computeroutput> + class template and friends that end users can use to generate domain-specific expression wrappers.</para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <!-- proto::default_generator -->
+      <struct name="default_generator">
+ <purpose>A simple generator that passes an expression through unchanged.</purpose>
+        <description>
+          <para>
+ Generators are intended for use as the first template parameter to the + <computeroutput><classname alt="proto::domain">proto::domain&lt;&gt;</classname></computeroutput> + class template and control if and how expressions within that domain are to be customized. + The <computeroutput>proto::default_generator</computeroutput> makes no modifications to the
+            expressions passed to it.
+          </para>
+        </description>
+        <inherit>
+          <type>proto::callable</type>
+        </inherit>
+        <struct-specialization name="result">
+          <template>
+            <template-type-parameter name="This"/>
+            <template-type-parameter name="Expr"/>
+          </template>
+          <specialization>
+            <template-arg>This(Expr)</template-arg>
+          </specialization>
+          <typedef name="type">
+            <type>Expr</type>
+          </typedef>
+        </struct-specialization>
+        <method-group name="public member functions">
+          <method name="operator()" cv="const">
+            <type>Expr</type>
+            <template>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <parameter name="expr">
+              <paramtype>Expr const &amp;</paramtype>
+              <description>
+                <para>A Proto expression</para>
+              </description>
+            </parameter>
+            <returns>
+              <para><computeroutput>expr</computeroutput></para>
+            </returns>
+          </method>
+        </method-group>
+      </struct>
+
+      <!-- proto::generator -->
+      <struct name="generator">
+        <template>
+          <template-nontype-parameter name="Extends">
+            <type>template&lt; typename &gt; class</type>
+          </template-nontype-parameter>
+        </template>
+ <purpose>A generator that wraps expressions passed to it in the specified extension wrapper.</purpose>
+        <description>
+          <para>
+ Generators are intended for use as the first template parameter to the + <computeroutput><classname alt="proto::domain">proto::domain&lt;&gt;</classname></computeroutput> + class template and control if and how expressions within that domain are to be customized. + <computeroutput>proto::generator&lt;&gt;</computeroutput> wraps each expression passed to it in
+            the <computeroutput>Extends&lt;&gt;</computeroutput> wrapper.
+          </para>
+        </description>
+        <struct-specialization name="result">
+          <template>
+            <template-type-parameter name="This"/>
+            <template-type-parameter name="Expr"/>
+          </template>
+          <specialization>
+            <template-arg>This(Expr)</template-arg>
+          </specialization>
+          <typedef name="type">
+            <type>Extends&lt; Expr &gt;</type>
+          </typedef>
+        </struct-specialization>
+        <method-group name="public member functions">
+          <method name="operator()" cv="const">
+            <type>Extends&lt; Expr &gt;</type>
+            <template>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <parameter name="expr">
+              <paramtype>Expr const &amp;</paramtype>
+              <description>
+                <para>A Proto expression</para>
+              </description>
+            </parameter>
+            <returns>
+ <para><computeroutput>Extends&lt;Expr&gt;(expr)</computeroutput></para>
+            </returns>
+          </method>
+        </method-group>
+      </struct>
+
+      <!-- proto::pod_generator -->
+      <struct name="pod_generator">
+        <template>
+          <template-nontype-parameter name="Extends">
+            <type>template&lt; typename &gt; class</type>
+          </template-nontype-parameter>
+        </template>
+ <purpose>A generator that wraps expressions passed to it in the specified extension wrapper and uses aggregate initialization for the wrapper. </purpose>
+        <description>
+          <para>
+ Generators are intended for use as the first template parameter to the + <computeroutput><classname alt="proto::domain">proto::domain&lt;&gt;</classname></computeroutput> + class template and control if and how expressions within that domain are to be customized. + <computeroutput>proto::pod_generator&lt;&gt;</computeroutput> wraps each expression passed + to it in the <computeroutput>Extends&lt;&gt;</computeroutput> wrapper, and uses aggregate
+            initialzation for the wrapped object.
+          </para>
+        </description>
+        <inherit>
+          <type><classname>proto::callable</classname></type>
+        </inherit>
+        <struct-specialization name="result">
+          <template>
+            <template-type-parameter name="This"/>
+            <template-type-parameter name="Expr"/>
+          </template>
+          <specialization>
+            <template-arg>This(Expr)</template-arg>
+          </specialization>
+          <typedef name="type">
+            <type>Extends&lt; Expr &gt;</type>
+          </typedef>
+        </struct-specialization>
+        <method-group name="public member functions">
+          <method name="operator()" cv="const">
+            <type>Extends&lt; Expr &gt;</type>
+            <template>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <parameter name="expr">
+              <paramtype>Expr const &amp;</paramtype>
+              <description>
+                <para>A Proto expression</para>
+              </description>
+            </parameter>
+            <returns>
+              <para>
+ <computeroutput>Extends&lt;Expr&gt; that = {expr}; return that;</computeroutput>
+              </para>
+            </returns>
+          </method>
+        </method-group>
+      </struct>
+
+      <!-- by_value_generator -->
+      <struct name="by_value_generator">
+ <purpose>A generator that replaces child nodes held by reference with ones held by value. + Use with <computeroutput><classname alt="proto::compose_generators">proto::compose_generators&lt;&gt;</classname>
+          </computeroutput> to forward that result to another generator.
+        </purpose>
+        <description>
+          <para>
+ Generators are intended for use as the first template parameter to the + <computeroutput><classname alt="proto::domain">proto::domain&lt;&gt;</classname></computeroutput> + class template and control if and how expressions within that domain are to be customized. + <computeroutput>proto::by_value_generator</computeroutput> ensures all child nodes are held + by value. This generator is typically composed with a second generator for further processing, + as <computeroutput><classname>proto::compose_generators</classname>&lt;proto::by_value_generator,
+            MyGenerator&gt;</computeroutput>.
+          </para>
+        </description>
+        <inherit>
+          <type><classname>proto::callable</classname></type>
+        </inherit>
+        <struct-specialization name="result">
+          <template>
+            <template-type-parameter name="This"/>
+            <template-type-parameter name="Expr"/>
+          </template>
+          <specialization>
+            <template-arg>This(Expr)</template-arg>
+          </specialization>
+          <typedef name="type">
+            <type><emphasis>unspecified</emphasis></type>
+          </typedef>
+        </struct-specialization>
+        <method-group name="public member functions">
+          <method name="operator()" cv="const">
+            <type><emphasis>unspecified</emphasis></type>
+            <template>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <parameter name="expr">
+              <paramtype>Expr const &amp;</paramtype>
+              <description>
+                <para>A Proto expression.</para>
+              </description>
+            </parameter>
+            <returns>
+ <para>Equivalent to <computeroutput><functionname>proto::deep_copy</functionname>(expr)</computeroutput></para>
+            </returns>
+          </method>
+        </method-group>
+      </struct>
+
+      <!-- proto::compose_generator -->
+      <struct name="compose_generators">
+        <template>
+          <template-type-parameter name="First"/>
+          <template-type-parameter name="Second"/>
+        </template>
+ <purpose>A composite generator that first applies one transform to an expression and then forwards + the result on to another generator for further transformation.</purpose>
+        <description>
+          <para>
+ Generators are intended for use as the first template parameter to the + <computeroutput><classname alt="proto::domain">proto::domain&lt;&gt;</classname></computeroutput> + class template and control if and how expressions within that domain are to be customized. + <computeroutput>proto::compose_generators&lt;&gt;</computeroutput> is a composite generator + that first applies one transform to an expression and then forwards the result on to another
+            generator for further transformation.
+          </para>
+        </description>
+        <inherit>
+          <type><classname>proto::callable</classname></type>
+        </inherit>
+        <struct-specialization name="result">
+          <template>
+            <template-type-parameter name="This"/>
+            <template-type-parameter name="Expr"/>
+          </template>
+          <specialization>
+            <template-arg>This(Expr)</template-arg>
+          </specialization>
+          <inherit>
+            <type>
+    boost::result_of&lt;
+      Second(typename boost::result_of&lt;First(Expr)&gt;::type)
+    &gt;</type>
+          </inherit>
+        </struct-specialization>
+        <method-group name="public member functions">
+          <method name="operator()" cv="const">
+            <type>typename boost::result_of&lt;
+      Second(typename boost::result_of&lt;First(Expr)&gt;::type)
+    &gt;::type</type>
+            <template>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <parameter name="expr">
+              <paramtype>Expr const &amp;</paramtype>
+              <description>
+                <para>A Proto expression.</para>
+              </description>
+            </parameter>
+            <returns>
+ <para><computeroutput>Second()(First()(expr))</computeroutput></para>
+            </returns>
+          </method>
+        </method-group>
+      </struct>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/literal.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/literal.hpp">
+  <para>
+    The
+ <computeroutput><classname alt="boost::proto::literal">proto::literal&lt;&gt;</classname></computeroutput>
+    terminal wrapper, and the
+ <computeroutput><functionname alt="boost::proto::lit">proto::lit()</functionname></computeroutput>
+    function for creating
+ <computeroutput><classname alt="boost::proto::literal">proto::literal&lt;&gt;</classname></computeroutput>
+    wrappers.
+  </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <struct name="literal">
+        <template>
+          <template-type-parameter name="T"/>
+          <template-type-parameter name="Domain">
+            <default><classname>proto::default_domain</classname></default>
+          </template-type-parameter>
+        </template>
+        <inherit>
+          <type>
+ <classname>proto::extends</classname>&lt;typename <classname>proto::terminal</classname>&lt;T&gt;::type, proto::literal&lt;T, Domain&gt;, Domain&gt;</type>
+        </inherit>
+ <purpose>A simple wrapper for a terminal, provided for ease of use.</purpose>
+        <description>
+          <para>
+ A simple wrapper for a terminal, provided for ease of use. In all cases, + <computeroutput>proto::literal&lt;X&gt; l(x);</computeroutput> is equivalent to + <computeroutput><classname>proto::terminal</classname>&lt;X&gt;::type l = {x};</computeroutput>.
+          </para>
+          <para>
+ The <computeroutput>Domain</computeroutput> template parameter defaults to + <computeroutput><classname>proto::default_domain</classname></computeroutput>.
+          </para>
+        </description>
+        <typedef name="X">
+          <purpose>For exposition only</purpose>
+ <type>typename <classname>proto::terminal</classname>&lt;T&gt;::type</type>
+        </typedef>
+        <typedef name="value_type">
+ <type>typename <classname>proto::result_of::value</classname>&lt;X&gt;::type</type>
+        </typedef>
+        <typedef name="reference">
+ <type>typename <classname>proto::result_of::value</classname>&lt;X &amp;&gt;::type</type>
+        </typedef>
+        <typedef name="const_reference">
+ <type>typename <classname>proto::result_of::value</classname>&lt;X const &amp;&gt;::type</type>
+        </typedef>
+        <method-group name="public member functions">
+          <method name="get">
+            <type>reference</type>
+            <returns>
+ <computeroutput><functionname>proto::value</functionname>(*this)</computeroutput>
+            </returns>
+          </method>
+          <method name="get" cv="const">
+            <type>const_reference</type>
+            <returns>
+ <computeroutput><functionname>proto::value</functionname>(*this)</computeroutput>
+            </returns>
+          </method>
+        </method-group>
+        <constructor>
+          <template>
+            <template-type-parameter name="U"/>
+          </template>
+          <parameter name="u">
+            <paramtype>U &amp;</paramtype>
+          </parameter>
+        </constructor>
+        <constructor>
+          <template>
+            <template-type-parameter name="U"/>
+          </template>
+          <parameter name="u">
+            <paramtype>U const &amp;</paramtype>
+          </parameter>
+        </constructor>
+        <constructor>
+          <template>
+            <template-type-parameter name="U"/>
+          </template>
+          <parameter name="u">
+ <paramtype><classname>proto::literal</classname>&lt; U, Domain &gt; const &amp;</paramtype>
+          </parameter>
+        </constructor>
+      </struct>
+
+      <!-- proto::lit() -->
+      <overloaded-function name="lit">
+        <signature>
+ <type><classname>proto::literal</classname>&lt; T &amp; &gt; const</type>
+          <template>
+            <template-type-parameter name="T"/>
+          </template>
+          <parameter name="t">
+            <paramtype>T &amp;</paramtype>
+            <description>
+              <para>The object to wrap.</para>
+            </description>
+          </parameter>
+        </signature>
+        <signature>
+ <type><classname>proto::literal</classname>&lt; T const &amp; &gt; const</type>
+          <template>
+            <template-type-parameter name="T"/>
+          </template>
+          <parameter name="t">
+            <paramtype>T const &amp;</paramtype>
+          </parameter>
+        </signature>
+        <purpose>A helper function for creating a <computeroutput>
+ <classname alt="proto::literal">proto::literal&lt;&gt;</classname></computeroutput> wrapper.
+        </purpose>
+        <returns>
+          <para>
+ <computeroutput><classname>proto::literal</classname>&lt;T &amp;&gt;(t)</computeroutput>
+          </para>
+        </returns>
+        <throws>
+          <simpara>Will not throw.</simpara>
+        </throws>
+        <notes>
+          <para>The returned value holds the argument by reference. </para>
+        </notes>
+      </overloaded-function>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/make_expr.xml       Mon Nov 30 05:58:26 2009
@@ -0,0 +1,446 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/make_expr.hpp">
+  <para>
+ Definition of the <computeroutput><functionname alt="boost::proto::make_expr">proto::make_expr()</functionname> + </computeroutput> and <computeroutput><functionname alt="boost::proto::unpack_expr">proto::unpack_expr()</functionname> + </computeroutput> utilities for building Proto expression nodes from child nodes or from a Fusion sequence of child
+    nodes, respectively.
+  </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="functional">
+        <!-- proto::functional::make_expr -->
+        <struct name="make_expr">
+          <template>
+            <template-type-parameter name="Tag"/>
+            <template-type-parameter name="Domain">
+ <default><classname>proto::deduce_domain</classname></default>
+            </template-type-parameter>
+          </template>
+ <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> equivalent to the <computeroutput> + <functionname alt="proto::make_expr">proto::make_expr()</functionname></computeroutput> function.</purpose>
+          <description>
+            <para>
+ In all cases, <computeroutput>proto::functional::make_expr&lt;Tag, Domain&gt;()(a...)</computeroutput> + is equivalent to <computeroutput><functionname>proto::make_expr</functionname>&lt;Tag, Domain&gt;(a...)</computeroutput>.
+            </para>
+            <para>
+ <computeroutput>proto::functional::make_expr&lt;Tag&gt;()(a...)</computeroutput> is equivalent to + <computeroutput><functionname>proto::make_expr</functionname>&lt;Tag&gt;(a...)</computeroutput>.
+            </para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="A" pack="1"/>
+            </template>
+            <specialization>
+              <template-arg>This(A...)</template-arg>
+            </specialization>
+            <inherit>
+              <type>
+ <classname>proto::result_of::make_expr</classname>&lt; Tag, Domain, A... &gt;</type>
+            </inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::make_expr</classname>&lt; Tag, Domain, A const... &gt;::type const</type>
+              <template>
+                <template-type-parameter name="A" pack="1"/>
+              </template>
+              <parameter name="a" pack="1">
+                <paramtype>A const &amp;</paramtype>
+              </parameter>
+              <description>
+                <para>
+ Construct an expression node with tag type <computeroutput>Tag</computeroutput> and in the
+                  domain <computeroutput>Domain</computeroutput>.
+                </para>
+                <para>
+                </para>
+              </description>
+              <returns>
+                <para>
+ <computeroutput><functionname>proto::make_expr</functionname>&lt;Tag, Domain&gt;(a...)</computeroutput>
+                </para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+
+        <!-- proto::functional::unpack_expr -->
+        <struct name="unpack_expr">
+          <template>
+            <template-type-parameter name="Tag"/>
+            <template-type-parameter name="Domain">
+ <default><classname>proto::deduce_domain</classname></default>
+            </template-type-parameter>
+          </template>
+ <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> equivalent to the + <computeroutput><functionname alt="proto::unpack_expr">proto::unpack_expr()</functionname></computeroutput> function.
+          </purpose>
+          <description>
+            <para>
+ In all cases, <computeroutput>proto::functional::unpack_expr&lt;Tag, Domain&gt;()(seq)</computeroutput> is + equivalent to <computeroutput><functionname alt="proto::unpack_expr">proto::unpack_expr()</functionname>&lt;Tag,
+              Domain&gt;(seq)</computeroutput>.
+            </para>
+            <para>
+ <computeroutput>proto::functional::unpack_expr&lt;Tag&gt;()(seq)</computeroutput> is equivalent to + <computeroutput><functionname alt="proto::unpack_expr">proto::unpack_expr()</functionname>&lt;Tag&gt;(seq)</computeroutput>.
+            </para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Sequence"/>
+            </template>
+            <specialization>
+              <template-arg>This(Sequence)</template-arg>
+            </specialization>
+            <inherit>
+              <type>
+    <classname>proto::result_of::unpack_expr</classname>&lt;
+      Tag,
+      Domain,
+      typename boost::remove_reference&lt; Sequence &gt;::type
+    &gt;</type>
+            </inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::unpack_expr</classname>&lt; Tag, Domain, Sequence const &gt;::type const</type>
+              <template>
+                <template-type-parameter name="Sequence"/>
+              </template>
+              <parameter name="sequence">
+                <paramtype>Sequence const &amp;</paramtype>
+                <description>
+                  <para>A Fusion Forward Sequence </para>
+                </description>
+              </parameter>
+              <description>
+                <para>
+ Construct an expression node with tag type <computeroutput>Tag</computeroutput> and in the
+                  domain <computeroutput>Domain</computeroutput>.
+                </para>
+              </description>
+              <returns>
+                <para>
+ <computeroutput><functionname>proto::unpack_expr</functionname>&lt;Tag, Domain&gt;(sequence)</computeroutput>
+                </para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+      </namespace>
+
+      <namespace name="result_of">
+        <!-- proto::result_of::make_expr -->
+        <struct name="make_expr">
+          <template>
+            <template-type-parameter name="Tag"/>
+            <template-type-parameter name="A" pack="1"/>
+          </template>
+          <purpose>Metafunction that computes the return type of the
+ <computeroutput><functionname alt="proto::make_expr">proto::make_expr()</functionname></computeroutput> + function, with a domain deduced from the domains of the children.</purpose>
+          <description>
+            <para>
+              Computes the return type of the
+ <computeroutput><functionname alt="proto::make_expr">proto::make_expr()</functionname></computeroutput> function.
+            </para>
+            <para>
+ In this specialization, the domain is deduced from the domains of the child types. + If <computeroutput><classname>proto::is_domain</classname>&lt;A<subscript>0</subscript>&gt;::value</computeroutput> + is <computeroutput>true</computeroutput>, then another specialization is selected.
+            </para>
+          </description>
+          <typedef name="D">
+            <purpose>For exposition only</purpose>
+ <type><replaceable>domain-deduced-from-child-types</replaceable></type>
+            <description>
+              <para>
+ For each <computeroutput>x</computeroutput> in <computeroutput>[0,N)</computeroutput> + (proceeding in order beginning with <computeroutput>x=0</computeroutput>), if + <computeroutput><classname>proto::domain_of</classname>&lt;A<subscript>x</subscript>&gt;::type</computeroutput> is not + <computeroutput><classname>proto::default_domain</classname></computeroutput>, then
+                <computeroutput>D</computeroutput> is
+ <computeroutput><classname>proto::domain_of</classname>&lt;A<subscript>x</subscript>&gt;::type</computeroutput>.
+                Otherwise, <computeroutput>D</computeroutput> is
+ <computeroutput><classname>proto::default_domain</classname></computeroutput>.
+              </para>
+            </description>
+          </typedef>
+          <typedef name="type">
+ <type>typename <classname>proto::result_of::make_expr</classname>&lt;Tag, D, A...&gt;::type</type>
+          </typedef>
+        </struct>
+        <struct-specialization name="make_expr">
+          <template>
+            <template-type-parameter name="Tag"/>
+            <template-type-parameter name="Domain"/>
+            <template-type-parameter name="A" pack="1"/>
+          </template>
+          <specialization>
+            <template-arg>Tag</template-arg>
+            <template-arg>Domain</template-arg>
+            <template-arg pack="1">A</template-arg>
+          </specialization>
+          <purpose>Metafunction that computes the return type of the
+ <computeroutput><functionname alt="proto::make_expr">proto::make_expr()</functionname></computeroutput>
+            function, within the specified domain.</purpose>
+          <description>
+            <para>
+              Computes the return type of the
+ <computeroutput><functionname alt="proto::make_expr">proto::make_expr()</functionname></computeroutput>
+              function.
+            </para>
+          </description>
+          <typedef name="type">
+            <description>
+              <para>
+                If <computeroutput>Tag</computeroutput> is
+ <computeroutput><classname>proto::tag::terminal</classname></computeroutput>, then
+                <computeroutput>type</computeroutput> is a typedef for
+ <computeroutput>boost::result_of&lt;Domain(<classname>proto::expr</classname>&lt; + <classname>proto::tag::terminal</classname>, <classname>proto::term</classname>&lt; + A<subscript>0</subscript> &gt; &gt;)&gt;::type</computeroutput>.
+              </para>
+              <para>
+ Otherwise, <computeroutput>type</computeroutput> is a typedef for + <computeroutput>boost::result_of&lt;Domain(<classname>proto::expr</classname>&lt; + Tag, <classname alt="proto::listN">proto::list<emphasis>N</emphasis></classname>&lt; + typename <classname>proto::result_of::as_child</classname>&lt;A&gt;::type...&gt; &gt;)&gt;::type</computeroutput>
+              </para>
+            </description>
+            <type><emphasis>see-below</emphasis></type>
+          </typedef>
+        </struct-specialization>
+        <!-- proto::result_of::unpack_expr -->
+        <struct name="unpack_expr">
+          <template>
+            <template-type-parameter name="Tag"/>
+            <template-type-parameter name="Sequence"/>
+            <template-type-parameter name="Void">
+              <default><type>void</type></default>
+            </template-type-parameter>
+          </template>
+          <purpose>Metafunction that computes the return type of the
+ <computeroutput><functionname alt="proto::unpack_expr">proto::unpack_expr()</functionname></computeroutput> + function, with a domain deduced from the domains of the children.
+          </purpose>
+          <description>
+            <para>
+              Compute the return type of the
+ <computeroutput><functionname alt="proto::unpack_expr">proto::unpack_expr()</functionname></computeroutput>
+              function.
+            </para>
+            <para>
+ <computeroutput>Sequence</computeroutput> is a Fusion Forward Sequence.
+            </para>
+            <para>
+ In this specialization, the domain is deduced from the domains of the child types. + If <computeroutput><classname>proto::is_domain</classname>&lt;Sequence&gt;::value</computeroutput> + is <computeroutput>true</computeroutput>, then another specialization is selected.
+            </para>
+          </description>
+          <typedef name="type">
+ <purpose>Where S is a RandomAccessSequence equivalent to Sequence, and N is the size of S.</purpose>
+            <type>
+    typename <classname>proto::result_of::make_expr</classname>&lt;
+      Tag,
+ typename fusion::result_of::value_at_c&lt;<replaceable>S</replaceable>, 0&gt;::type,
+      ...
+ typename fusion::result_of::value_at_c&lt;<replaceable>S</replaceable>, <replaceable>N</replaceable>-1&gt;::type
+    &gt;::type
+  </type>
+          </typedef>
+        </struct>
+        <struct-specialization name="unpack_expr">
+          <template>
+            <template-type-parameter name="Tag"/>
+            <template-type-parameter name="Domain"/>
+            <template-type-parameter name="Sequence"/>
+          </template>
+          <specialization>
+            <template-arg>Tag</template-arg>
+            <template-arg>Domain</template-arg>
+            <template-arg>Sequence</template-arg>
+          </specialization>
+          <purpose>Metafunction that computes the return type of the
+ <computeroutput><functionname alt="proto::unpack_expr">proto::unpack_expr()</functionname></computeroutput>
+            function, within the specified domain.
+          </purpose>
+          <description>
+            <para>
+              Computes the return type of the
+ <computeroutput><functionname alt="proto::unpack_expr">proto::unpack_expr()</functionname></computeroutput>
+              function.
+            </para>
+          </description>
+          <typedef name="type">
+ <purpose>Where S is a RandomAccessSequence equivalent to Sequence, and N is the size of S.</purpose>
+            <type>
+    typename <classname>proto::result_of::make_expr</classname>&lt;
+      Tag,
+      Domain,
+ typename fusion::result_of::value_at_c&lt;<replaceable>S</replaceable>, 0&gt;::type,
+      ...
+ typename fusion::result_of::value_at_c&lt;<replaceable>S</replaceable>, <replaceable>N</replaceable>-1&gt;::type
+    &gt;::type
+  </type>
+          </typedef>
+        </struct-specialization>
+      </namespace>
+
+      <!-- proto::make_expr() -->
+      <overloaded-function name="make_expr">
+        <signature>
+ <type>typename <classname>proto::result_of::make_expr</classname>&lt;Tag, A const...&gt;::type const</type>
+          <template>
+            <template-type-parameter name="Tag"/>
+            <template-type-parameter name="A" pack="1"/>
+          </template>
+          <parameter name="a" pack="1">
+            <paramtype>A const &amp;</paramtype>
+          </parameter>
+        </signature>
+        <signature>
+ <type>typename <classname>proto::result_of::make_expr</classname>&lt;Tag, Domain, A const...&gt;::type const</type>
+          <template>
+            <template-type-parameter name="Tag"/>
+            <template-type-parameter name="Domain"/>
+            <template-type-parameter name="A" pack="1"/>
+          </template>
+          <parameter name="a" pack="1">
+            <paramtype>A const &amp;</paramtype>
+          </parameter>
+        </signature>
+ <purpose>Construct an expression of the requested tag type with a domain and with the specified
+          arguments as children.</purpose>
+        <description>
+          <para>
+ This function template may be invoked either with or without specifying a + <computeroutput>Domain</computeroutput> template parameter. If no domain is specified, the domain + is deduced by examining in order the domains of the given arguments and taking the first that is + not <computeroutput><classname>proto::default_domain</classname></computeroutput>, if any such + domain exists, or <computeroutput><classname>proto::default_domain</classname></computeroutput>
+            otherwise.
+          </para>
+          <para>
+ Let <computeroutput><replaceable>WRAP</replaceable>(x)</computeroutput> be defined such that:
+            <itemizedlist>
+              <listitem>
+                <para>
+ If <computeroutput>x</computeroutput> is a <computeroutput>boost::reference_wrapper&lt;&gt;</computeroutput>, + <computeroutput><replaceable>WRAP</replaceable>(x)</computeroutput> is equivalent to + <computeroutput><functionname>proto::as_child</functionname>&lt;Domain&gt;(x.get())</computeroutput>.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+ Otherwise, <computeroutput><replaceable>WRAP</replaceable>(x)</computeroutput> is equivalent to + <computeroutput><functionname>proto::as_expr</functionname>&lt;Domain&gt;(x)</computeroutput>.
+                </para>
+              </listitem>
+            </itemizedlist>
+ Let <computeroutput><replaceable>MAKE</replaceable>&lt;Tag&gt;(a...)</computeroutput> be defined as
+            <computeroutput><classname>proto::expr</classname>&lt;Tag,
+ <classname alt="proto::listN">proto::list<emphasis>N</emphasis></classname>&lt;A...&gt; &gt;::make(a...)</computeroutput>
+            where
+ <computeroutput>A<subscript>x</subscript></computeroutput> is the type of
+            <computeroutput>a<subscript>x</subscript></computeroutput>.
+          </para>
+          <para>
+          </para>
+        </description>
+        <returns>
+          <para>
+ <computeroutput>Domain()(<replaceable>MAKE</replaceable>&lt;Tag&gt;(<replaceable>WRAP</replaceable>(a)...))</computeroutput>.
+          </para>
+        </returns>
+      </overloaded-function>
+
+      <!-- proto::unpack_expr() -->
+      <overloaded-function name="unpack_expr">
+        <signature>
+ <type>typename <classname>proto::result_of::unpack_expr</classname>&lt;Tag, Sequence const&gt;::type const</type>
+          <template>
+            <template-type-parameter name="Tag"/>
+            <template-type-parameter name="Sequence"/>
+          </template>
+          <parameter name="sequence">
+            <paramtype>Sequence const &amp;</paramtype>
+            <description>
+              <para>A Fusion Forward Sequence.</para>
+            </description>
+          </parameter>
+        </signature>
+        <signature>
+ <type>typename <classname>proto::result_of::unpack_expr</classname>&lt;Tag, Domain, Sequence const&gt;::type const</type>
+          <template>
+            <template-type-parameter name="Tag"/>
+            <template-type-parameter name="Domain"/>
+            <template-type-parameter name="Sequence"/>
+          </template>
+          <parameter name="sequence">
+            <paramtype>Sequence const &amp;</paramtype>
+          </parameter>
+        </signature>
+ <purpose>Construct an expression of the requested tag type with a domain and with children
+          from the specified Fusion Forward Sequence.</purpose>
+        <description>
+          <para>
+ This function template may be invoked either with or without specifying a + <computeroutput>Domain</computeroutput> argument. If no domain is specified, the domain is + deduced by examining in order the domains of the elements of <computeroutput>sequence</computeroutput>
+            and taking the first that is not
+ <computeroutput><classname>proto::default_domain</classname></computeroutput>, if any such domain + exists, or <computeroutput><classname>proto::default_domain</classname></computeroutput> otherwise.
+          </para>
+          <para>
+ Let <computeroutput>s</computeroutput> be a Fusion Random Access Sequence equivalent to
+            <computeroutput>sequence</computeroutput>.
+ Let <computeroutput><replaceable>WRAP</replaceable>&lt;N&gt;(s)</computeroutput>, where + <computeroutput>s</computeroutput> has type <computeroutput>S</computeroutput>, be defined such that:
+            <itemizedlist>
+              <listitem>
+                <para>
+ If <computeroutput>fusion::result_of::value_at_c&lt;S,N&gt;::type</computeroutput> is a reference, + <computeroutput><replaceable>WRAP</replaceable>&lt;N&gt;(s)</computeroutput> is equivalent to + <computeroutput><functionname>proto::as_child</functionname>&lt;Domain&gt;(fusion::at_c&lt;N&gt;(s))</computeroutput>.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+ Otherwise, <computeroutput><replaceable>WRAP</replaceable>&lt;N&gt;(s)</computeroutput> is equivalent to + <computeroutput><functionname>proto::as_expr</functionname>&lt;Domain&gt;(fusion::at_c&lt;N&gt;(s))</computeroutput>.
+                </para>
+              </listitem>
+            </itemizedlist>
+ Let <computeroutput><replaceable>MAKE</replaceable>&lt;Tag&gt;(a...)</computeroutput> be defined as
+            <computeroutput><classname>proto::expr</classname>&lt;Tag,
+ <classname alt="proto::listN">proto::list<emphasis>N</emphasis></classname>&lt;A...&gt; &gt;::make(a...)</computeroutput>
+            where
+ <computeroutput>A<subscript>x</subscript></computeroutput> is the type of
+            <computeroutput>a<subscript>x</subscript></computeroutput>.
+          </para>
+        </description>
+        <returns>
+          <para>
+ <computeroutput>Domain()(<replaceable>MAKE</replaceable>&lt;Tag&gt;(<replaceable>WRAP</replaceable>&lt;0&gt;(s),... + <replaceable>WRAP</replaceable>&lt;<replaceable>N</replaceable>-1&gt;(s)))</computeroutput>, where + <replaceable>N</replaceable> is the size of <computeroutput>Sequence</computeroutput>.
+          </para>
+        </returns>
+      </overloaded-function>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/matches.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,821 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/matches.hpp">
+  <para>
+    Contains definition of the
+    <computeroutput>
+ <classname alt="boost::proto::matches">proto::matches&lt;&gt;</classname>
+    </computeroutput>
+ metafunction for determining if a given expression matches a given pattern.
+  </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <struct name="_">
+ <inherit><type><classname>proto::transform</classname>&lt;_&gt;</type></inherit> + <purpose>A wildcard grammar element that matches any expression, and a transform that returns
+          the current expression unchanged.</purpose>
+        <description>
+          <para>
+ The wildcard type, <computeroutput>proto::_</computeroutput>, is a grammar element such + that <computeroutput><classname>proto::matches</classname>&lt;E, proto::_&gt;::value</computeroutput> + is <computeroutput>true</computeroutput> for any expression type <computeroutput>E</computeroutput>.
+          </para>
+          <para>
+ The wildcard can also be used as a stand-in for a template argument when matching terminals.
+            For instance, the following is a grammar that will match any
+ <computeroutput>std::complex&lt;&gt;</computeroutput> terminal:<programlisting>BOOST_MPL_ASSERT((
+  <classname>proto::matches</classname>&lt;
+ <classname>proto::terminal</classname>&lt;std::complex&lt;double&gt; &gt;::type, + <emphasis role="bold"><classname>proto::terminal</classname>&lt;std::complex&lt; proto::_ &gt; &gt;</emphasis>
+  &gt;
+));</programlisting>
+          </para>
+          <para>
+ When used as a transform, <computeroutput>proto::_</computeroutput> returns the current expression + unchanged. For instance, in the following, <computeroutput>proto::_</computeroutput> is used with + the <computeroutput><classname alt="proto::fold">proto::fold&lt;&gt;</classname></computeroutput> + transform to fold the children of a node:<programlisting>struct CountChildren :
+  <classname>proto::or_</classname>&lt;
+    // Terminals have no children
+ <classname>proto::when</classname>&lt;<classname>proto::terminal</classname>&lt;proto::_&gt;, mpl::int_&lt;0&gt;()&gt;,
+    // Use proto::fold&lt;&gt; to count the children of non-terminals
+    <classname>proto::otherwise</classname>&lt;
+      <classname>proto::fold</classname>&lt;
+        proto::_, // &lt;-- fold the current expression
+        mpl::int_&lt;0&gt;(),
+ mpl::plus&lt;<classname>proto::_state</classname>, mpl::int_&lt;1&gt; &gt;()
+      &gt;
+    &gt;
+  &gt;
+{};</programlisting>
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><type><classname>proto::transform_impl</classname>&lt;Expr, State, Data&gt;</type></inherit>
+          <typedef name="result_type">
+            <type>Expr</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>Expr</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+                <description>
+                  <para>An expression </para>
+                </description>
+              </parameter>
+              <parameter name="">
+                <paramtype>typename impl::state_param</paramtype>
+              </parameter>
+              <parameter name="">
+                <paramtype>typename impl::data_param</paramtype>
+              </parameter>
+              <returns>
+                <para>
+                  <computeroutput>expr</computeroutput>
+                </para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+        <typedef name="proto_base_expr">
+          <type>_</type>
+        </typedef>
+      </struct>
+
+      <!-- proto::not_ -->
+      <struct name="not_">
+        <template>
+          <template-type-parameter name="Grammar"/>
+        </template>
+ <inherit><type><classname>proto::transform</classname>&lt;not_&lt;Grammar&gt; &gt;</type></inherit> + <purpose>Inverts the set of expressions matched by a grammar. When used as a transform, + <computeroutput>proto::not_&lt;&gt;</computeroutput> returns the current expression unchanged.
+        </purpose>
+        <description>
+          <para>
+ If an expression type <computeroutput>E</computeroutput> does not match a grammar + <computeroutput>G</computeroutput>, then <computeroutput>E</computeroutput> <emphasis>does</emphasis> + match <computeroutput>proto::not_&lt;G&gt;</computeroutput>. For example, + <computeroutput><classname>proto::not_</classname>&lt;<classname>proto::terminal</classname>&lt;<classname>proto::_</classname>&gt; &gt;</computeroutput>
+            will match any non-terminal.
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><type><classname>proto::transform_impl</classname>&lt;Expr, State, Data&gt;</type></inherit>
+          <typedef name="result_type">
+            <type>Expr</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>Expr</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+                <description>
+                  <para>An expression </para>
+                </description>
+              </parameter>
+              <parameter name="">
+                <paramtype>typename impl::state_param</paramtype>
+              </parameter>
+              <parameter name="">
+                <paramtype>typename impl::data_param</paramtype>
+              </parameter>
+              <requires>
+                <para>
+ <computeroutput><classname>proto::matches</classname>&lt;Expr, proto::not_&gt;::value</computeroutput>
+                  is <computeroutput>true</computeroutput>.
+                </para>
+              </requires>
+              <returns>
+                <para>
+                  <computeroutput>expr</computeroutput>
+                </para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+        <typedef name="proto_base_expr">
+          <type>not_</type>
+        </typedef>
+      </struct>
+
+      <!-- proto::if_ -->
+      <struct name="if_">
+        <template>
+          <template-type-parameter name="If"/>
+          <template-type-parameter name="Then">
+            <default><type><classname>proto::_</classname></type></default>
+          </template-type-parameter>
+          <template-type-parameter name="Else">
+ <default><type><classname>proto::not_</classname>&lt;<classname>proto::_</classname>&gt;</type></default>
+          </template-type-parameter>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt;if_&lt;If, Then, Else&gt; &gt;</inherit> + <purpose>Used to select one grammar or another based on the result of a compile-time Boolean. + When used as a transform, <computeroutput>proto::if_&lt;&gt;</computeroutput> selects between two
+          transforms based on a compile-time Boolean.</purpose>
+        <description>
+          <para>
+ When <computeroutput>proto::if_&lt;If, Then, Else&gt;</computeroutput> is used as a grammar, + <computeroutput>If</computeroutput> must be a Proto transform and + <computeroutput>Then</computeroutput> and <computeroutput>Else</computeroutput> must be grammars.
+            An expression type <computeroutput>E</computeroutput> matches
+ <computeroutput>proto::if_&lt;If, Then, Else&gt;</computeroutput> if + <computeroutput>boost::result_of&lt;<classname>proto::when</classname>&lt;<classname>proto::_</classname>, If&gt;(E)&gt;::type::value</computeroutput>
+            is <computeroutput>true</computeroutput> and
+ <computeroutput>E</computeroutput> matches <computeroutput>Then</computeroutput>; or, if + <computeroutput>boost::result_of&lt;<classname>proto::when</classname>&lt;<classname>proto::_</classname>, If&gt;(E)&gt;::type::value</computeroutput> + is <computeroutput>false</computeroutput> and <computeroutput>E</computeroutput> matches <computeroutput>Else</computeroutput>.
+          </para>
+          <para>
+ The template parameter <computeroutput>Then</computeroutput> defaults to <computeroutput><classname>proto::_</classname></computeroutput>
+            and <computeroutput>Else</computeroutput> defaults to
+ <computeroutput><classname>proto::not_</classname>&lt;<classname>proto::_</classname>&gt;</computeroutput>, + so an expression type <computeroutput>E</computeroutput> will match + <computeroutput>proto::if_&lt;If&gt;</computeroutput> if and only if + <computeroutput>boost::result_of&lt;<classname>proto::when</classname>&lt;<classname>proto::_</classname>, If&gt;(E)&gt;::type::value</computeroutput>
+            is <computeroutput>true</computeroutput>.
+          </para>
+          <para>
+ <programlisting>// A grammar that only matches integral terminals,
+// using is_integral&lt;&gt; from Boost.Type_traits.
+struct IsIntegral :
+  <classname>proto::and_</classname>&lt;
+ <classname>proto::terminal</classname>&lt;<classname>proto::_</classname>&gt;, + <classname>proto::if_</classname>&lt; boost::is_integral&lt;<classname>proto::_value</classname>&gt;()&gt;
+  &gt;
+{};</programlisting>
+          </para>
+          <para>
+ When <computeroutput>proto::if_&lt;If, Then, Else&gt;</computeroutput> is used as a transform, + <computeroutput>If</computeroutput>, <computeroutput>Then</computeroutput> and + <computeroutput>Else</computeroutput> must be Proto transforms. When applying the transform to + an expression <computeroutput>E</computeroutput>, state <computeroutput>S</computeroutput> and
+            data <computeroutput>V</computeroutput>, if
+ <computeroutput>boost::result_of&lt;<classname>proto::when</classname>&lt;<classname>proto::_</classname>, If&gt;(E,S,V)&gt;::type::value</computeroutput> + is <computeroutput>true</computeroutput> then the <computeroutput>Then</computeroutput> transform + is applied; otherwise the <computeroutput>Else</computeroutput> transform is applied. + <programlisting>// Match a terminal. If the terminal is integral, return
+// mpl::true_; otherwise, return mpl::false_.
+struct IsIntegral2 :
+  <classname>proto::when</classname>&lt;
+    <classname>proto::terminal</classname>&lt;_&gt;,
+    proto::if_&lt;
+      boost::is_integral&lt;<classname>proto::_value</classname>&gt;(),
+      mpl::true_(),
+      mpl::false_()
+    &gt;
+  &gt;
+{};</programlisting>
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><type><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</type></inherit>
+          <typedef name="result_type">
+            <type>typename mpl::if_&lt;
+ typename boost::result_of&lt;<classname>proto::when</classname>&lt;<classname>proto::_</classname>, If&gt;(Expr, State, Data)&gt;::type, + typename boost::result_of&lt;<classname>proto::when</classname>&lt;<classname>proto::_</classname>, Then&gt;(Expr, State, Data)&gt;::type, + typename boost::result_of&lt;<classname>proto::when</classname>&lt;<classname>proto::_</classname>, Else&gt;(Expr, State, Data)&gt;::type
+    &gt;::type</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>result_type</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+                <description>
+                  <para>An expression </para>
+                </description>
+              </parameter>
+              <parameter name="state">
+                <paramtype>typename impl::state_param</paramtype>
+                <description>
+                  <para>The current state </para>
+                </description>
+              </parameter>
+              <parameter name="data">
+                <paramtype>typename impl::data_param</paramtype>
+                <description>
+                  <para>A data of arbitrary type </para>
+                </description>
+              </parameter>
+              <returns>
+                <para>
+ <computeroutput><classname>proto::when</classname>&lt;<classname>proto::_</classname>, <replaceable>Then-or-Else</replaceable>&gt;()(expr, state, data)</computeroutput>
+                </para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+        <typedef name="proto_base_expr">
+          <type>if_</type>
+        </typedef>
+      </struct>
+
+      <!-- proto::or_ -->
+      <struct name="or_">
+        <template>
+          <template-type-parameter name="G" pack="1"/>
+        </template>
+ <inherit><type><classname>proto::transform</classname>&lt;or_&lt;G...&gt; &gt;</type></inherit> + <purpose>For matching one of a set of alternate grammars. Alternates are tried in order to avoid ambiguity. + When used as a transform, <computeroutput>proto::or_&lt;&gt;</computeroutput> applies the transform + associated with the first grammar that matches the expression.</purpose>
+        <description>
+          <para>
+            An expression type <computeroutput>E</computeroutput> matches
+ <computeroutput>proto::or_&lt;G<subscript>0</subscript>,G<subscript>1</subscript>,...G<subscript>n</subscript>&gt;</computeroutput> + if <computeroutput>E</computeroutput> matches any <computeroutput>G<subscript>x</subscript></computeroutput> for + <computeroutput>x</computeroutput> in <computeroutput>[0,n]</computeroutput>.
+          </para>
+          <para>
+            When applying
+ <computeroutput>proto::or_&lt;G<subscript>0</subscript>,G<subscript>1</subscript>,...G<subscript>n</subscript>&gt;</computeroutput> + as a transform with an expression <computeroutput>e</computeroutput> of type <computeroutput>E</computeroutput>, + state <computeroutput>s</computeroutput> and data <computeroutput>v</computeroutput>, it is equivalent to + <computeroutput>G<subscript>x</subscript>()(e, s, v)</computeroutput>, where + <computeroutput>x</computeroutput> is the lowest number such that + <computeroutput><classname>proto::matches</classname>&lt;E, G<subscript>x</subscript>&gt;::value</computeroutput>
+            is <computeroutput>true</computeroutput>.
+          </para>
+          <para>
+ The maximun number of template arguments <computeroutput>proto::or_&lt;&gt;</computeroutput> accepts + is controlled by the <computeroutput><macroname>BOOST_PROTO_MAX_LOGICAL_ARITY</macroname></computeroutput>
+            macro.
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><type><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</type></inherit>
+          <typedef name="result_type">
+            <type><replaceable>unspecified</replaceable></type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>result_type</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+                <description>
+                  <para>An expression </para>
+                </description>
+              </parameter>
+              <parameter name="state">
+                <paramtype>typename impl::state_param</paramtype>
+                <description>
+                  <para>The current state </para>
+                </description>
+              </parameter>
+              <parameter name="data">
+                <paramtype>typename impl::data_param</paramtype>
+                <description>
+                  <para>A data of arbitrary type </para>
+                </description>
+              </parameter>
+              <returns>
+                <para>
+                  <computeroutput>
+                    G<subscript>x</subscript>()(expr, state, data)
+                  </computeroutput>, where
+ <computeroutput>x</computeroutput> is the lowest number such that
+                  <computeroutput>
+ <classname>proto::matches</classname>&lt;Expr, G<subscript>x</subscript>&gt;::value
+                  </computeroutput>
+                  is <computeroutput>true</computeroutput>.
+                </para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+        <typedef name="proto_base_expr">
+          <type>or_</type>
+        </typedef>
+      </struct>
+
+      <!-- proto::and_ -->
+      <struct name="and_">
+        <template>
+          <template-type-parameter name="G" pack="1"/>
+        </template>
+ <inherit><type><classname>proto::transform</classname>&lt;and_&lt;G...&gt; &gt;</type></inherit> + <purpose>For matching all of a set of grammars. When used as a transform, + <computeroutput>proto::and_&lt;&gt;</computeroutput> applies the transform associated
+          with the <emphasis>last</emphasis> grammar in the set.</purpose>
+        <description>
+          <para>
+            An expression type <computeroutput>E</computeroutput> matches
+ <computeroutput>proto::and_&lt;G<subscript>0</subscript>,G<subscript>1</subscript>,...G<subscript>n</subscript>&gt;</computeroutput> + if <computeroutput>E</computeroutput> matches all <computeroutput>G<subscript>x</subscript></computeroutput> + for <computeroutput>x</computeroutput> in <computeroutput>[0,n]</computeroutput>.
+          </para>
+          <para>
+            When applying
+ <computeroutput>proto::and_&lt;G<subscript>0</subscript>,G<subscript>1</subscript>,...G<subscript>n</subscript>&gt;</computeroutput> + as a transform with an expression <computeroutput>e</computeroutput>, state + <computeroutput>s</computeroutput> and data <computeroutput>v</computeroutput>, it is equivalent + to <computeroutput>G<subscript>n</subscript>()(e, s, v)</computeroutput>.
+          </para>
+          <para>
+ The maximun number of template arguments <computeroutput>proto::and_&lt;&gt;</computeroutput> accepts + is controlled by the <computeroutput><macroname>BOOST_PROTO_MAX_LOGICAL_ARITY</macroname></computeroutput>
+            macro.
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><type><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</type></inherit>
+          <typedef name="result_type">
+ <type>typename boost::result_of&lt;G<subscript>n</subscript>(Expr, State, Data)&gt;::type</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>result_type</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+                <description>
+                  <para>An expression </para>
+                </description>
+              </parameter>
+              <parameter name="state">
+                <paramtype>typename impl::state_param</paramtype>
+                <description>
+                  <para>The current state </para>
+                </description>
+              </parameter>
+              <parameter name="data">
+                <paramtype>typename impl::data_param</paramtype>
+                <description>
+                  <para>A data of arbitrary type </para>
+                </description>
+              </parameter>
+              <returns>
+                <para>
+ <computeroutput>G<subscript>n</subscript>()(expr, state, data)</computeroutput>
+                </para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+        <typedef name="proto_base_expr">
+          <type>and_</type>
+        </typedef>
+      </struct>
+
+      <!-- proto::switch_ -->
+      <struct name="switch_">
+        <template>
+          <template-type-parameter name="Cases"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt;switch_&lt;Cases&gt; &gt;</inherit> + <purpose>For matching one of a set of alternate grammars, which are looked up based on an
+          expression's tag type. When used as a transform,
+ <computeroutput>proto::switch_&lt;&gt;</computeroutput> applies the transform associated
+          with the sub-grammar that matches the expression.</purpose>
+        <description>
+          <para>
+            An expression type <computeroutput>E</computeroutput> matches
+            <computeroutput>proto::switch_&lt;C&gt;</computeroutput> if
+            <computeroutput>E</computeroutput> matches
+            <computeroutput>C::case_&lt;E::proto_tag&gt;</computeroutput>.
+          </para>
+          <para>
+ When applying <computeroutput>proto::switch_&lt;C&gt;</computeroutput> as a transform
+            with an expression <computeroutput>e</computeroutput> of type
+ <computeroutput>E</computeroutput>, state <computeroutput>s</computeroutput> and
+            data <computeroutput>v</computeroutput>, it is equivalent to
+ <computeroutput>C::case_&lt;E::proto_tag&gt;()(e, s, v)</computeroutput>.
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit><type>
+ Cases::template case_&lt;typename Expr::tag_type&gt;::template impl&lt;Expr, State, Data&gt;</type></inherit>
+        </struct>
+        <typedef name="proto_base_expr">
+          <type>switch_</type>
+        </typedef>
+      </struct>
+
+      <!-- proto::exact -->
+      <struct name="exact">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+        <purpose>For forcing exact matches of terminal types.</purpose>
+        <description>
+ <para>By default, matching terminals ignores references and cv-qualifiers. For instance,
+            a terminal expression of type
+ <computeroutput><classname>proto::terminal</classname>&lt;int const &amp;&gt;::type</computeroutput> + will match the grammar <computeroutput><classname>proto::terminal</classname>&lt;int&gt;</computeroutput>.
+            If that is not desired, you can force an exact match with
+ <computeroutput><classname>proto::terminal</classname>&lt;proto::exact&lt;int&gt; &gt;</computeroutput>. + This will only match integer terminals where the terminal is held by value.</para>
+        </description>
+      </struct>
+
+      <!-- proto::convertible_to -->
+      <struct name="convertible_to">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <purpose>For matching terminals that are convertible to a type.</purpose>
+        <description>
+          <para>
+ Use <computeroutput>proto::convertible_to&lt;&gt;</computeroutput> to match a terminal that is
+            convertible to some type. For example, the grammar
+ <computeroutput><classname>proto::terminal</classname>&lt;proto::convertible_to&lt;int&gt; &gt;</computeroutput> + will match any terminal whose argument is convertible to an integer.
+          </para>
+        </description>
+      </struct>
+
+      <!-- proto::vararg -->
+      <struct name="vararg">
+        <template>
+          <template-type-parameter name="Grammar"/>
+        </template>
+ <purpose>For matching a Grammar to a variable number of sub-expressions.</purpose>
+        <description>
+          <para>
+ An expression type <computeroutput><classname>proto::expr</classname>&lt;AT, + <classname alt="proto::listN">proto::list<replaceable>N</replaceable></classname>&lt;A<subscript>0</subscript>,...A<subscript>n</subscript>,U<subscript>0</subscript>,...U<subscript>m</subscript>&gt; &gt;</computeroutput> + matches a grammar <computeroutput><classname>proto::expr</classname>&lt;BT, + <classname alt="proto::listN">proto::list<replaceable>M</replaceable></classname>&lt;B<subscript>0</subscript>,...B<subscript>n</subscript>,proto::vararg&lt;V&gt; &gt; &gt;</computeroutput> + if <computeroutput>BT</computeroutput> is <computeroutput><classname>proto::_</classname></computeroutput>
+            or <computeroutput>AT</computeroutput>, and if
+ <computeroutput>A<subscript>x</subscript></computeroutput> matches
+            <computeroutput>B<subscript>x</subscript></computeroutput>
+ for each <computeroutput>x</computeroutput> in <computeroutput>[0,n]</computeroutput> + and if <computeroutput>U<subscript>x</subscript></computeroutput> matches + <computeroutput>V</computeroutput> for each <computeroutput>x</computeroutput> in <computeroutput>[0,m]</computeroutput>.
+          </para>
+          <para>For example:</para>
+          <para>
+ <programlisting>// Match any function call expression, irregardless
+// of the number of function arguments:
+struct Function :
+ <classname>proto::function</classname>&lt; proto::vararg&lt;proto::_&gt; &gt;
+{};</programlisting>
+          </para>
+          <para>
+ When used as a transform, <computeroutput>proto::vararg&lt;G&gt;</computeroutput>
+            applies <computeroutput>G</computeroutput>'s transform.
+          </para>
+        </description>
+      </struct>
+
+      <!-- proto::matches -->
+      <struct name="matches">
+        <template>
+          <template-type-parameter name="Expr"/>
+          <template-type-parameter name="Grammar"/>
+        </template>
+ <purpose>A Boolean metafunction that evaluates whether a given expression type matches a grammar.</purpose>
+        <description>
+          <para>
+ <computeroutput>proto::matches&lt;Expr, Grammar&gt;</computeroutput> inherits from
+            <computeroutput>mpl::true_</computeroutput> if
+            <computeroutput>Expr::proto_base_expr</computeroutput> matches
+ <computeroutput>Grammar::proto_base_expr</computeroutput>, and from
+            <computeroutput>mpl::false_</computeroutput> otherwise.
+          </para>
+          <para>
+ Non-terminal expressions are matched against a grammar according to the following rules:
+            <itemizedlist>
+              <listitem>
+                <para>
+                  The wildcard pattern, <computeroutput>
+                    <classname>proto::_</classname>
+                  </computeroutput>, matches any expression.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+                  An expression
+                  <computeroutput>
+                    <classname>proto::expr</classname>&lt;AT,
+                    <classname alt="proto::listN">
+                      proto::list<replaceable>N</replaceable>
+ </classname>&lt;A<subscript>0</subscript>,...A<subscript>n</subscript>&gt;
+                    &gt;
+                  </computeroutput>
+                  matches a grammar
+                  <computeroutput>
+                    <classname>proto::expr</classname>&lt;BT,
+                    <classname alt="proto::listN">
+                      proto::list<replaceable>N</replaceable>
+ </classname>&lt;B<subscript>0</subscript>,...B<subscript>n</subscript>&gt;
+                    &gt;
+                  </computeroutput> if
+                  <computeroutput>BT</computeroutput> is <computeroutput>
+                    <classname>proto::_</classname>
+                  </computeroutput> or
+ <computeroutput>AT</computeroutput>, and if <computeroutput>
+                    A<subscript>x</subscript>
+                  </computeroutput> matches
+                  <computeroutput>
+                    B<subscript>x</subscript>
+ </computeroutput> for each <computeroutput>x</computeroutput> in <computeroutput>[0,n]</computeroutput>.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+                  An expression
+                  <computeroutput>
+                    <classname>proto::expr</classname>&lt;AT,
+                    <classname alt="proto::listN">
+                      proto::list<replaceable>N</replaceable>
+ </classname>&lt;A<subscript>0</subscript>,...A<subscript>n</subscript>,U<subscript>0</subscript>,...U<subscript>m</subscript>&gt;
+                    &gt;
+                  </computeroutput> matches a grammar
+                  <computeroutput>
+                    <classname>proto::expr</classname>&lt;BT,
+                    <classname alt="proto::listN">
+                      proto::list<replaceable>M</replaceable>
+ </classname>&lt;B<subscript>0</subscript>,...B<subscript>n</subscript>,<classname>proto::vararg</classname>&lt;V&gt;
+                    &gt; &gt;
+                  </computeroutput> if
+                  <computeroutput>BT</computeroutput> is <computeroutput>
+                    <classname>proto::_</classname>
+                  </computeroutput> or
+                  <computeroutput>AT</computeroutput>, and if
+                  <computeroutput>
+                    A<subscript>x</subscript>
+                  </computeroutput> matches
+                  <computeroutput>
+                    B<subscript>x</subscript>
+                  </computeroutput> for each
+ <computeroutput>x</computeroutput> in <computeroutput>[0,n]</computeroutput> and if
+                  <computeroutput>
+                    U<subscript>x</subscript>
+                  </computeroutput> matches
+ <computeroutput>V</computeroutput> for each <computeroutput>x</computeroutput> in
+                  <computeroutput>[0,m]</computeroutput>.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+                  An expression <computeroutput>E</computeroutput> matches
+                  <computeroutput>
+ <classname>proto::or_</classname>&lt;B<subscript>0</subscript>,...B<subscript>n</subscript>&gt;
+                  </computeroutput> if
+                  <computeroutput>E</computeroutput> matches some
+                  <computeroutput>
+                    B<subscript>x</subscript>
+                  </computeroutput> for
+ <computeroutput>x</computeroutput> in <computeroutput>[0,n]</computeroutput>.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+                  An expression <computeroutput>E</computeroutput> matches
+                  <computeroutput>
+ <classname>proto::and_</classname>&lt;B<subscript>0</subscript>,...B<subscript>n</subscript>&gt;
+                  </computeroutput> if
+                  <computeroutput>E</computeroutput> matches all
+                  <computeroutput>
+                    B<subscript>x</subscript>
+                  </computeroutput> for
+ <computeroutput>x</computeroutput> in <computeroutput>[0,n]</computeroutput>.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+                  An expression <computeroutput>E</computeroutput> matches
+                  <computeroutput>
+                    <classname>proto::if_</classname>&lt;T,U,V&gt;
+                  </computeroutput> if:
+                  <itemizedlist>
+                    <listitem>
+                      <computeroutput>
+ boost::result_of&lt;<classname>proto::when</classname>&lt;<classname>proto::_</classname>,T&gt;(E)&gt;::type::value
+                      </computeroutput>
+                      is <computeroutput>true</computeroutput> and
+                      <computeroutput>E</computeroutput> matches
+ <computeroutput>U</computeroutput>, <emphasis>or</emphasis>
+                    </listitem>
+                    <listitem>
+                      <computeroutput>
+ boost::result_of&lt;<classname>proto::when</classname>&lt;<classname>proto::_</classname>,T&gt;(E)&gt;::type::value
+                      </computeroutput>
+ is <computeroutput>false</computeroutput> and <computeroutput>E</computeroutput> matches
+                      <computeroutput>V</computeroutput>.
+                    </listitem>
+                  </itemizedlist>
+ Note: <computeroutput>U</computeroutput> defaults to <computeroutput>
+                    <classname>proto::_</classname>
+                  </computeroutput>
+                  and <computeroutput>V</computeroutput> defaults to
+                  <computeroutput>
+ <classname>proto::not_</classname>&lt;<classname>proto::_</classname>&gt;
+                  </computeroutput>.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+                  An expression <computeroutput>E</computeroutput> matches
+                  <computeroutput>
+                    <classname>proto::not_</classname>&lt;T&gt;
+                  </computeroutput> if
+ <computeroutput>E</computeroutput> does <emphasis>not</emphasis> match <computeroutput>T</computeroutput>.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+                  An expression <computeroutput>E</computeroutput> matches
+                  <computeroutput>
+                    <classname>proto::switch_</classname>&lt;C&gt;
+                  </computeroutput> if
+ <computeroutput>E</computeroutput> matches <computeroutput>C::case_&lt;E::proto_tag&gt;</computeroutput>.
+                </para>
+              </listitem>
+            </itemizedlist>
+          </para>
+          <para>
+            A terminal expression
+            <computeroutput>
+              <classname>proto::expr</classname>&lt;AT,
+              <classname>proto::term</classname>&lt;A&gt; &gt;
+            </computeroutput> matches a grammar
+            <computeroutput>
+ <classname>proto::expr</classname>&lt;BT, <classname>proto::term</classname>&lt;B&gt; &gt;
+            </computeroutput>
+ if <computeroutput>BT</computeroutput> is <computeroutput><classname>proto::_</classname></computeroutput> + or <computeroutput>AT</computeroutput> and one of the following is true:
+            <itemizedlist>
+              <listitem>
+                <para>
+ <computeroutput>B</computeroutput> is the wildcard pattern,
+                  <computeroutput>
+                    <classname>proto::_</classname>
+                  </computeroutput>
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+ <computeroutput>A</computeroutput> is <computeroutput>B</computeroutput>
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+ <computeroutput>A</computeroutput> is <computeroutput>B &amp;</computeroutput>
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+ <computeroutput>A</computeroutput> is <computeroutput>B const &amp;</computeroutput>
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+                  <computeroutput>B</computeroutput> is <computeroutput>
+                    <classname>proto::exact</classname>&lt;A&gt;
+                  </computeroutput>
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+                  <computeroutput>B</computeroutput> is
+                  <computeroutput>
+                    <classname>proto::convertible_to</classname>&lt;X&gt;
+                  </computeroutput>
+ and <computeroutput>boost::is_convertible&lt;A,X&gt;::value</computeroutput> is
+                  <computeroutput>true</computeroutput>.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+ <computeroutput>A</computeroutput> is <computeroutput>X[M]</computeroutput> or
+                  <computeroutput>X(&amp;)[M]</computeroutput> and
+                  <computeroutput>B</computeroutput> is <computeroutput>
+                    X[<globalname>proto::N</globalname>]
+                  </computeroutput>.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+ <computeroutput>A</computeroutput> is <computeroutput>X(&amp;)[M]</computeroutput> + and <computeroutput>B</computeroutput> is <computeroutput>
+                    X(&amp;)[<globalname>proto::N</globalname>]
+                  </computeroutput>.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+ <computeroutput>A</computeroutput> is <computeroutput>X[M]</computeroutput> or + <computeroutput>X(&amp;)[M]</computeroutput> and <computeroutput>B</computeroutput> is
+                  <computeroutput>X*</computeroutput>.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+ <computeroutput>B</computeroutput> <replaceable>lambda-matches</replaceable>
+                  <computeroutput>A</computeroutput> (see below).
+                </para>
+              </listitem>
+            </itemizedlist>
+          </para>
+          <para>
+ A type <computeroutput>B</computeroutput> <replaceable>lambda-matches</replaceable> + <computeroutput>A</computeroutput> if one of the following is true:
+            <itemizedlist>
+              <listitem>
+                <para>
+ <computeroutput>B</computeroutput> is <computeroutput>A</computeroutput>
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+ <computeroutput>B</computeroutput> is the wildcard pattern, <computeroutput>
+                    <classname>proto::_</classname>
+                  </computeroutput>
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+                  <computeroutput>B</computeroutput> is <computeroutput>
+ T&lt;B<subscript>0</subscript>,...B<subscript>n</subscript>&gt; + </computeroutput> and <computeroutput>A</computeroutput> is <computeroutput> + T&lt;A<subscript>0</subscript>,...A<subscript>n</subscript>&gt; + </computeroutput> and for each <computeroutput>x</computeroutput> in <computeroutput>[0,n]</computeroutput>, + <computeroutput>A<subscript>x</subscript></computeroutput> and + <computeroutput>B<subscript>x</subscript></computeroutput> are types such that + <computeroutput>A<subscript>x</subscript></computeroutput> <replaceable>lambda-matches</replaceable> + <computeroutput>B<subscript>x</subscript></computeroutput>
+                </para>
+              </listitem>
+            </itemizedlist>
+          </para>
+        </description>
+        <inherit>
+ <type>mpl::bool_&lt;<replaceable>true-or-false</replaceable>&gt;</type></inherit>
+      </struct>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/operators.xml       Mon Nov 30 05:58:26 2009
@@ -0,0 +1,1843 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/operators.hpp">
+ <para>Contains all the overloaded operators that make it possible to build Proto expression trees. </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <struct name="is_extension">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+        <inherit><type>mpl::false_</type></inherit>
+ <purpose>Boolean metafunction that can be used to enable the operator overloads in the + <computeroutput>exops</computeroutput> namespace for the specified non-Proto terminal type.</purpose>
+      </struct>
+      <function name="operator+">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator+">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator-">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator-">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator*">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator*">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator~">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator~">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&amp;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&amp;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator!">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator!">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator++">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator++">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator--">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator--">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator++">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg &amp;</paramtype>
+        </parameter>
+        <parameter name="">
+          <paramtype>int</paramtype>
+        </parameter>
+      </function>
+      <function name="operator++">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg const &amp;</paramtype>
+        </parameter>
+        <parameter name="">
+          <paramtype>int</paramtype>
+        </parameter>
+      </function>
+      <function name="operator--">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg &amp;</paramtype>
+        </parameter>
+        <parameter name="">
+          <paramtype>int</paramtype>
+        </parameter>
+      </function>
+      <function name="operator--">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Arg"/>
+        </template>
+        <parameter name="arg">
+          <paramtype>Arg const &amp;</paramtype>
+        </parameter>
+        <parameter name="">
+          <paramtype>int</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&lt;&lt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&lt;&lt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&lt;&lt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&lt;&lt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&gt;&gt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&gt;&gt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&gt;&gt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&gt;&gt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator*">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator*">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator*">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator*">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator/">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator/">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator/">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator/">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator%">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator%">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator%">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator%">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator+">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator+">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator+">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator+">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator-">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator-">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator-">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator-">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&lt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&lt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&lt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&lt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&gt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&gt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&gt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&gt;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&lt;=">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&lt;=">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&lt;=">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&lt;=">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&gt;=">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&gt;=">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&gt;=">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&gt;=">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator==">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator==">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator==">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator==">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator!=">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator!=">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator!=">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator!=">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator||">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator||">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator||">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator||">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&amp;&amp;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&amp;&amp;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&amp;&amp;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&amp;&amp;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left const &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right const &amp;</paramtype>
+        </parameter>
+      </function>
+      <function name="operator&amp;">
+        <type><emphasis>unspecified</emphasis></type>
+        <template>
+          <template-type-parameter name="Left"/>
+          <template-type-parameter name="Right"/>
+        </template>
+        <parameter name="left">
+          <paramtype>Left &amp;</paramtype>
+        </parameter>
+        <parameter name="right">
+          <paramtype>Right &amp;</paramtype>
+        </parameter>
+      </function>
***The diff for this file has been truncated for email.***
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/proto.xml   Mon Nov 30 05:58:26 2009
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/proto.hpp">
+ <para>Includes all of Proto, except the Boost.Typeof registrations.</para>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/proto_fwd.xml       Mon Nov 30 05:58:26 2009
@@ -0,0 +1,372 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/proto_fwd.hpp">
+ <para>Forward declarations of all of proto's public types and functions. </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <struct name="callable">
+ <purpose>Base class for callable <conceptname>PolymorphicFunctionObject</conceptname>s</purpose>
+        <description>
+          <para>
+ When defining a callable <conceptname>PolymorphicFunctionObject</conceptname>, inherit + from <computeroutput>proto::callable</computeroutput> so that it can be used to create
+            a <conceptname>CallableTransform</conceptname>.
+          </para>
+          <para>
+ <computeroutput><classname>proto::is_callable</classname>&lt;T&gt;::value</computeroutput> is + <computeroutput>true</computeroutput> for types that inherit from
+            <computeroutput>proto::callable</computeroutput>.
+          </para>
+        </description>
+      </struct>
+      <data-member name="N">
+        <description>
+ <para>Array size wildcard for Proto grammars that match array terminals.</para></description>
+        <type>int const</type>
+      </data-member>
+      <namespace name="functional">
+        <typedef name="make_terminal">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::terminal</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_unary_plus">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::unary_plus</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_negate">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::negate</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_dereference">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::dereference</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_complement">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::complement</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_address_of">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::address_of</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_logical_not">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::logical_not</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_pre_inc">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::pre_inc</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_pre_dec">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::pre_dec</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_post_inc">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::post_inc</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_post_dec">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::post_dec</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_shift_left">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::shift_left</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_shift_right">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::shift_right</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_multiplies">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::multiplies</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_divides">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::divides</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_modulus">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::modulus</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_plus">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::plus</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_minus">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::minus</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_less">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::less</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_greater">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::greater</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_less_equal">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::less_equal</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_greater_equal">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::greater_equal</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_equal_to">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::equal_to</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_not_equal_to">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::not_equal_to</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_logical_or">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::logical_or</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_logical_and">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::logical_and</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_bitwise_and">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::bitwise_and</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_bitwise_or">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::bitwise_or</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_bitwise_xor">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::bitwise_xor</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_comma">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::comma</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_mem_ptr">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::mem_ptr</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::assign</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_shift_left_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::shift_left_assign</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_shift_right_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::shift_right_assign</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_multiplies_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::multiplies_assign</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_divides_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::divides_assign</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_modulus_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::modulus_assign</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_plus_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::plus_assign</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_minus_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::minus_assign</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_bitwise_and_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::bitwise_and_assign</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_bitwise_or_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::bitwise_or_assign</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_bitwise_xor_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::bitwise_xor_assign</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_subscript">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::subscript</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_if_else">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::if_else_</classname> &gt;</type>
+        </typedef>
+        <typedef name="make_function">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::function</classname> &gt;</type>
+        </typedef>
+      </namespace>
+      <typedef name="_flatten">
+        <type><classname>proto::functional::flatten</classname></type>
+      </typedef>
+      <typedef name="_pop_front">
+        <type><classname>proto::functional::pop_front</classname></type>
+      </typedef>
+      <typedef name="_reverse">
+        <type><classname>proto::functional::reverse</classname></type>
+      </typedef>
+      <typedef name="_eval">
+        <type><classname>proto::functional::eval</classname></type>
+      </typedef>
+      <typedef name="_deep_copy">
+        <type><classname>proto::functional::deep_copy</classname></type>
+      </typedef>
+      <typedef name="_make_terminal">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::terminal</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_unary_plus">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::unary_plus</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_negate">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::negate</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_dereference">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::dereference</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_complement">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::complement</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_address_of">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::address_of</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_logical_not">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::logical_not</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_pre_inc">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::pre_inc</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_pre_dec">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::pre_dec</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_post_inc">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::post_inc</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_post_dec">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::post_dec</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_shift_left">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::shift_left</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_shift_right">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::shift_right</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_multiplies">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::multiplies</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_divides">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::divides</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_modulus">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::modulus</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_plus">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::plus</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_minus">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::minus</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_less">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::less</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_greater">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::greater</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_less_equal">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::less_equal</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_greater_equal">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::greater_equal</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_equal_to">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::equal_to</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_not_equal_to">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::not_equal_to</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_logical_or">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::logical_or</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_logical_and">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::logical_and</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_bitwise_and">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::bitwise_and</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_bitwise_or">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::bitwise_or</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_bitwise_xor">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::bitwise_xor</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_comma">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::comma</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_mem_ptr">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::mem_ptr</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::assign</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_shift_left_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::shift_left_assign</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_shift_right_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::shift_right_assign</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_multiplies_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::multiplies_assign</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_divides_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::divides_assign</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_modulus_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::modulus_assign</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_plus_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::plus_assign</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_minus_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::minus_assign</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_bitwise_and_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::bitwise_and_assign</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_bitwise_or_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::bitwise_or_assign</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_bitwise_xor_assign">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::bitwise_xor_assign</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_subscript">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::subscript</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_if_else">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::if_else_</classname> &gt;</type>
+      </typedef>
+      <typedef name="_make_function">
+ <type><classname>proto::functional::make_expr</classname>&lt; <classname>proto::tag::function</classname> &gt;</type>
+      </typedef>
+      <typedef name="_childN">
+ <purpose>For each <replaceable>N</replaceable> in <computeroutput>[0,BOOST_PROTO_MAX_ARITY)</computeroutput></purpose> + <type><classname>proto::_child_c</classname>&lt; <replaceable>N</replaceable> &gt;</type>
+      </typedef>
+      <typedef name="_child">
+ <type><classname alt="proto::_childN">proto::_child0</classname></type>
+      </typedef>
+      <typedef name="_left">
+ <type><classname alt="proto::_childN">proto::_child0</classname></type>
+      </typedef>
+      <typedef name="_right">
+ <type><classname alt="proto::_childN">proto::_child1</classname></type>
+      </typedef>
+    </namespace>
+  </namespace>
+  <macro name="BOOST_PROTO_MAX_ARITY">
+ <purpose>Controls the maximum number of child nodes an expression may have.</purpose>
+    <description>
+      <para>
+ <computeroutput>BOOST_PROTO_MAX_ARITY</computeroutput> defaults to 5. It may be set higher or lower, but not + lower than 3. Setting it higher will have a negative effect on compile times.
+      </para>
+      <para>
+ See also <computeroutput><macroname>BOOST_PROTO_MAX_FUNCTION_CALL_ARITY</macroname></computeroutput>.
+      </para>
+    </description>
+  </macro>
+  <macro name="BOOST_PROTO_MAX_LOGICAL_ARITY">
+    <purpose>Controls the maximum number of sub-grammars that
+    <computeroutput>
+      <classname alt="boost::proto::or_">proto::or_&lt;&gt;</classname>
+    </computeroutput> and
+      <computeroutput>
+        <classname alt="boost::proto::and_">proto::and_&lt;&gt;</classname>
+      </computeroutput> accept.</purpose>
+    <description>
+      <para>
+ <computeroutput>BOOST_PROTO_MAX_LOGICAL_ARITY</computeroutput> defaults to 8. It may be set higher or lower. Setting
+        it higher will have a negative effect on compile times.
+      </para>
+    </description>
+  </macro>
+  <macro name="BOOST_PROTO_MAX_FUNCTION_CALL_ARITY">
+ <purpose>Controls the maximum number of arguments that <computeroutput>operator()</computeroutput> overloads
+      accept.</purpose>
+    <description>
+      <para>
+        When setting
+        <computeroutput>
+          <macroname>BOOST_PROTO_MAX_ARITY</macroname>
+        </computeroutput> higher than the default, compile times
+ slow down considerably. That is due in large part to the explosion in the number of + <computeroutput>operator()</computeroutput> overloads that must be generated for each + Proto expression type. By setting <computeroutput>BOOST_PROTO_MAX_FUNCTION_CALL_ARITY</computeroutput> + lower than <computeroutput><macroname>BOOST_PROTO_MAX_ARITY</macroname></computeroutput>,
+        compile times can be sped up considerably.
+      </para>
+    </description>
+  </macro>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/proto_typeof.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/proto_typeof.hpp">
+  <para>Boost.Typeof registrations for Proto's types, and definition of the
+ <computeroutput><macroname>BOOST_PROTO_AUTO</macroname>()</computeroutput> macro.</para>
+  <macro name="BOOST_PROTO_AUTO" kind="functionlike">
+    <macro-parameter name="Var"/>
+    <macro-parameter name="Expr"/>
+ <purpose>For defining a local variable that stores a Proto expression template, + deep-copying the expression so there are no dangling references.</purpose>
+    <description>
+      <para>
+ To define a local variable <computeroutput>ex</computeroutput> that stores the expression + <computeroutput><functionname alt="boost::proto::lit">proto::lit</functionname>(1) + 2</computeroutput>, + do the following:<programlisting>BOOST_PROTO_AUTO( ex, <functionname alt="boost::proto::lit">proto::lit</functionname>(1) + 2 );</programlisting>.
+        The above is equivalent to the following:
+ <programlisting>BOOST_AUTO( ex, <functionname alt="boost::proto::deep_copy">proto::deep_copy</functionname>( <functionname alt="boost::proto::lit">proto::lit</functionname>(1) + 2 ) );</programlisting>
+      </para>
+    </description>
+  </macro>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/repeat.xml  Mon Nov 30 05:58:26 2009
@@ -0,0 +1,511 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/repeat.hpp">
+  <para>
+    Contains macros to ease the generation of repetitious code constructs.
+  </para>
+
+  <macro name="BOOST_PROTO_REPEAT" kind="functionlike">
+    <macro-parameter name="MACRO"/>
+    <purpose>Repeatedly invoke the specified macro.</purpose>
+    <description>
+      <para>
+ <computeroutput>BOOST_PROTO_REPEAT()</computeroutput> is used to generate the kind of repetitive
+        code that is typical of DSELs built with Proto.
+ <computeroutput>BOOST_PROTO_REPEAT(<replaceable>MACRO</replaceable>)</computeroutput>
+        is equivalent to:
+      </para>
+      <para>
+ <programlisting><replaceable>MACRO</replaceable>(1, <macroname>BOOST_PROTO_typename_A</macroname>, <macroname>BOOST_PROTO_A_const_ref</macroname>, <macroname>BOOST_PROTO_A_const_ref_a</macroname>, <macroname>BOOST_PROTO_ref_a</macroname>) +<replaceable>MACRO</replaceable>(2, <macroname>BOOST_PROTO_typename_A</macroname>, <macroname>BOOST_PROTO_A_const_ref</macroname>, <macroname>BOOST_PROTO_A_const_ref_a</macroname>, <macroname>BOOST_PROTO_ref_a</macroname>)
+...
+<replaceable>MACRO</replaceable>(<macroname>BOOST_PROTO_MAX_ARITY</macroname>, <macroname>BOOST_PROTO_typename_A</macroname>, <macroname>BOOST_PROTO_A_const_ref</macroname>, <macroname>BOOST_PROTO_A_const_ref_a</macroname>, <macroname>BOOST_PROTO_ref_a</macroname>)</programlisting>
+      </para>
+      <para>
+        <emphasis role="bold">Example:</emphasis>
+      </para>
+      <para>
+ See <computeroutput><macroname>BOOST_PROTO_REPEAT_FROM_TO</macroname>()</computeroutput>.
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_REPEAT_FROM_TO" kind="functionlike">
+    <macro-parameter name="FROM"/>
+    <macro-parameter name="TO"/>
+    <macro-parameter name="MACRO"/>
+    <purpose>Repeatedly invoke the specified macro.</purpose>
+    <description>
+      <para>
+ <computeroutput>BOOST_PROTO_REPEAT_FROM_TO()</computeroutput> is used to generate the kind of repetitive
+        code that is typical of DSELs built with Proto.
+ <computeroutput>BOOST_PROTO_REPEAT_FROM_TO(<replaceable>FROM</replaceable>, <replaceable>TO</replaceable>, <replaceable>MACRO</replaceable>)</computeroutput>
+        is equivalent to:
+      </para>
+      <para>
+ <programlisting><replaceable>MACRO</replaceable>(<replaceable>FROM</replaceable>, <macroname>BOOST_PROTO_typename_A</macroname>, <macroname>BOOST_PROTO_A_const_ref</macroname>, <macroname>BOOST_PROTO_A_const_ref_a</macroname>, <macroname>BOOST_PROTO_ref_a</macroname>) +<replaceable>MACRO</replaceable>(<replaceable>FROM+1</replaceable>, <macroname>BOOST_PROTO_typename_A</macroname>, <macroname>BOOST_PROTO_A_const_ref</macroname>, <macroname>BOOST_PROTO_A_const_ref_a</macroname>, <macroname>BOOST_PROTO_ref_a</macroname>)
+...
+<replaceable>MACRO</replaceable>(<replaceable>TO-1</replaceable>, <macroname>BOOST_PROTO_typename_A</macroname>, <macroname>BOOST_PROTO_A_const_ref</macroname>, <macroname>BOOST_PROTO_A_const_ref_a</macroname>, <macroname>BOOST_PROTO_ref_a</macroname>)</programlisting>
+      </para>
+      <para>
+        <emphasis role="bold">Example:</emphasis>
+      </para>
+      <para>
+ <programlisting>// Generate BOOST_PROTO_MAX_ARITY-1 overloads of the
+// following construct() function template.
+#define M0(N, typename_A, A_const_ref, A_const_ref_a, ref_a)      \
+template&lt;typename T, typename_A(N)&gt;                               \
+typename <classname alt="boost::proto::result_of::make_expr">proto::result_of::make_expr</classname>&lt; \ + <classname alt="boost::proto::tag::function">proto::tag::function</classname> \
+  , construct_helper&lt;T&gt;                                           \
+  , A_const_ref(N)                                                \
+>::type const                                                     \
+construct(A_const_ref_a(N))                                       \
+{                                                                 \
+ return <functionname alt="boost::proto::make_expr">proto::make_expr</functionname>&lt; \ + <classname alt="boost::proto::tag::function">proto::tag::function</classname> \
+    &gt;(                                                            \
+        construct_helper&lt;T&gt;()                                     \
+      , ref_a(N)                                                  \
+    );                                                            \
+}
+BOOST_PROTO_REPEAT_FROM_TO(1, BOOST_PROTO_MAX_ARITY, M0)
+#undef M0</programlisting>
+      </para>
+      <para>
+ The above invocation of <computeroutput>BOOST_PROTO_REPEAT_FROM_TO()</computeroutput>
+        will generate the following code:
+      </para>
+      <para>
+        <programlisting>template&lt;typename T, typename A0&gt;
+typename <classname alt="boost::proto::result_of::make_expr">proto::result_of::make_expr</classname>&lt; + <classname alt="boost::proto::tag::function">proto::tag::function</classname>
+  , construct_helper&lt;T&gt;
+  , A0 const &amp;
+&gt;::type const
+construct(A0 const &amp; a0)
+{
+ return <functionname alt="boost::proto::make_expr">proto::make_expr</functionname>&lt; + <classname alt="boost::proto::tag::function">proto::tag::function</classname>
+    &gt;(
+        construct_helper&lt;T&gt;()
+      , boost::ref(a0)
+    );
+}
+
+template&lt;typename T, typename A0, typename A1&gt;
+typename <classname alt="boost::proto::result_of::make_expr">proto::result_of::make_expr</classname>&lt; + <classname alt="boost::proto::tag::function">proto::tag::function</classname>
+  , construct_helper&lt;T&gt;
+  , A0 const &amp;
+  , A1 const &amp;
+&gt;::type const
+construct(A0 const &amp; a0, A1 const &amp; a1)
+{
+ return <functionname alt="boost::proto::make_expr">proto::make_expr</functionname>&lt; + <classname alt="boost::proto::tag::function">proto::tag::function</classname>
+    &gt;(
+        construct_helper&lt;T&gt;()
+      , boost::ref(a0)
+      , boost::ref(a1)
+    );
+}
+
+// ... and so on, up to BOOST_PROTO_MAX_ARITY-1 arguments ...</programlisting>
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_REPEAT_EX" kind="functionlike">
+    <macro-parameter name="MACRO"/>
+    <macro-parameter name="typename_A"/>
+    <macro-parameter name="A"/>
+    <macro-parameter name="A_a"/>
+    <macro-parameter name="a"/>
+    <purpose>Repeatedly invoke the specified macro.</purpose>
+    <description>
+      <para>
+ <computeroutput>BOOST_PROTO_REPEAT_EX()</computeroutput> is used to generate the kind of repetitive
+        code that is typical of DSELs built with Proto.
+ <computeroutput>BOOST_PROTO_REPEAT_EX(<replaceable>MACRO</replaceable>, <replaceable>typename_A</replaceable>, <replaceable>A</replaceable>, <replaceable>A_a</replaceable>, <replaceable>a</replaceable>)</computeroutput>
+        is equivalent to:
+      </para>
+      <para>
+ <programlisting><replaceable>MACRO</replaceable>(1, typename_A, A, A_a, a)
+<replaceable>MACRO</replaceable>(2, typename_A, A, A_a, a)
+...
+<replaceable>MACRO</replaceable>(<macroname>BOOST_PROTO_MAX_ARITY</macroname>, typename_A, A, A_a, a)</programlisting>
+      </para>
+      <para>
+        <emphasis role="bold">Example:</emphasis>
+      </para>
+      <para>
+ See <computeroutput><macroname>BOOST_PROTO_REPEAT_FROM_TO</macroname>()</computeroutput>.
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_REPEAT_FROM_TO_EX" kind="functionlike">
+    <macro-parameter name="FROM"/>
+    <macro-parameter name="TO"/>
+    <macro-parameter name="MACRO"/>
+    <macro-parameter name="typename_A"/>
+    <macro-parameter name="A"/>
+    <macro-parameter name="A_a"/>
+    <macro-parameter name="a"/>
+    <purpose>Repeatedly invoke the specified macro.</purpose>
+    <description>
+      <para>
+ <computeroutput>BOOST_PROTO_REPEAT_FROM_TO_EX()</computeroutput> is used to generate the kind of repetitive
+        code that is typical of DSELs built with Proto.
+ <computeroutput>BOOST_PROTO_REPEAT_FROM_TO_EX(<replaceable>FROM</replaceable>, <replaceable>TO</replaceable>, <replaceable>MACRO</replaceable>, <replaceable>typename_A</replaceable>, <replaceable>A</replaceable>, <replaceable>A_a</replaceable>, <replaceable>a</replaceable>)</computeroutput>
+        is equivalent to:
+      </para>
+      <para>
+ <programlisting><replaceable>MACRO</replaceable>(<replaceable>FROM</replaceable>, typename_A, A, A_a, a) +<replaceable>MACRO</replaceable>(<replaceable>FROM+1</replaceable>, typename_A, A, A_a, a)
+...
+<replaceable>MACRO</replaceable>(<replaceable>TO-1</replaceable>, typename_A, A, A_a, a)</programlisting>
+      </para>
+      <para>
+        <emphasis role="bold">Example:</emphasis>
+      </para>
+      <para>
+ See <computeroutput><macroname>BOOST_PROTO_REPEAT_FROM_TO</macroname>()</computeroutput>.
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_LOCAL_ITERATE" kind="functionlike">
+    <purpose>Vertical repetition of a user-supplied macro.</purpose>
+    <description>
+      <para>
+ <computeroutput>BOOST_PROTO_LOCAL_ITERATE()</computeroutput> is used generate the kind of repetitive code that is typical + of DSELs built with Proto. This macro causes the user-defined macro <computeroutput>BOOST_PROTO_LOCAL_MACRO()</computeroutput> to + be expanded with values in the range specified by <computeroutput>BOOST_PROTO_LOCAL_LIMITS</computeroutput>.
+      </para>
+      <para>
+        <emphasis role="bold">Usage:</emphasis>
+      </para>
+      <para>
+ <programlisting>#include BOOST_PROTO_LOCAL_ITERATE()</programlisting>
+      </para>
+      <para>
+        <emphasis role="bold">Example:</emphasis>
+      </para>
+      <para>
+ <programlisting>// Generate BOOST_PROTO_MAX_ARITY-1 overloads of the
+// following construct() function template.
+#define BOOST_PROTO_LOCAL_MACRO(N, typename_A, A_const_ref, A_const_ref_a, ref_a)\
+template&lt;typename T, typename_A(N)&gt;                               \
+typename <classname alt="boost::proto::result_of::make_expr">proto::result_of::make_expr</classname>&lt; \ + <classname alt="boost::proto::tag::function">proto::tag::function</classname> \
+  , construct_helper&lt;T&gt;                                           \
+  , A_const_ref(N)                                                \
+>::type const                                                     \
+construct(A_const_ref_a(N))                                       \
+{                                                                 \
+ return <functionname alt="boost::proto::make_expr">proto::make_expr</functionname>&lt; \ + <classname alt="boost::proto::tag::function">proto::tag::function</classname> \
+    &gt;(                                                            \
+        construct_helper&lt;T&gt;()                                     \
+      , ref_a(N)                                                  \
+    );                                                            \
+}
+#define BOOST_PROTO_LOCAL_LIMITS (1, BOOST_PP_DEC(BOOST_PROTO_MAX_ARITY))
+#include BOOST_PROTO_LOCAL_ITERATE()</programlisting>
+      </para>
+      <para>
+ The above inclusion of <computeroutput>BOOST_PROTO_LOCAL_ITERATE()</computeroutput>
+        will generate the following code:
+      </para>
+      <para>
+        <programlisting>template&lt;typename T, typename A0&gt;
+typename <classname alt="boost::proto::result_of::make_expr">proto::result_of::make_expr</classname>&lt; + <classname alt="boost::proto::tag::function">proto::tag::function</classname>
+  , construct_helper&lt;T&gt;
+  , A0 const &amp;
+&gt;::type const
+construct(A0 const &amp; a0)
+{
+ return <functionname alt="boost::proto::make_expr">proto::make_expr</functionname>&lt; + <classname alt="boost::proto::tag::function">proto::tag::function</classname>
+    &gt;(
+        construct_helper&lt;T&gt;()
+      , boost::ref(a0)
+    );
+}
+
+template&lt;typename T, typename A0, typename A1&gt;
+typename <classname alt="boost::proto::result_of::make_expr">proto::result_of::make_expr</classname>&lt; + <classname alt="boost::proto::tag::function">proto::tag::function</classname>
+  , construct_helper&lt;T&gt;
+  , A0 const &amp;
+  , A1 const &amp;
+&gt;::type const
+construct(A0 const &amp; a0, A1 const &amp; a1)
+{
+ return <functionname alt="boost::proto::make_expr">proto::make_expr</functionname>&lt; + <classname alt="boost::proto::tag::function">proto::tag::function</classname>
+    &gt;(
+        construct_helper&lt;T&gt;()
+      , boost::ref(a0)
+      , boost::ref(a1)
+    );
+}
+
+// ... and so on, up to BOOST_PROTO_MAX_ARITY-1 arguments ...</programlisting>
+      </para>
+      <para>
+ If <computeroutput>BOOST_PROTO_LOCAL_LIMITS</computeroutput> is not defined by the user, it defaults
+        to <computeroutput>(1, BOOST_PROTO_MAX_ARITY)</computeroutput>.
+      </para>
+      <para>
+ At each iteration, <computeroutput>BOOST_PROTO_LOCAL_MACRO()</computeroutput> is invoked with the current
+        iteration number and the following 4 macro parameters:
+        <itemizedlist>
+ <listitem><computeroutput>BOOST_PROTO_LOCAL_typename_A</computeroutput></listitem> + <listitem><computeroutput>BOOST_PROTO_LOCAL_A</computeroutput></listitem> + <listitem><computeroutput>BOOST_PROTO_LOCAL_A_a</computeroutput></listitem> + <listitem><computeroutput>BOOST_PROTO_LOCAL_a</computeroutput></listitem>
+        </itemizedlist>
+ If these macros are not defined by the user, they default respectively to:
+        <itemizedlist>
+ <listitem><computeroutput><macroname>BOOST_PROTO_typename_A</macroname></computeroutput></listitem> + <listitem><computeroutput><macroname>BOOST_PROTO_A_const_ref</macroname></computeroutput></listitem> + <listitem><computeroutput><macroname>BOOST_PROTO_A_const_ref_a</macroname></computeroutput></listitem> + <listitem><computeroutput><macroname>BOOST_PROTO_ref_a</macroname></computeroutput></listitem>
+        </itemizedlist>
+      </para>
+      <para>
+ After including <computeroutput>BOOST_PROTO_LOCAL_ITERATE()</computeroutput>, the
+        following macros are automatically undefined:
+        <itemizedlist>
+ <listitem><computeroutput>BOOST_PROTO_LOCAL_MACRO</computeroutput></listitem> + <listitem><computeroutput>BOOST_PROTO_LOCAL_LIMITS</computeroutput></listitem> + <listitem><computeroutput>BOOST_PROTO_LOCAL_typename_A</computeroutput></listitem> + <listitem><computeroutput>BOOST_PROTO_LOCAL_A</computeroutput></listitem> + <listitem><computeroutput>BOOST_PROTO_LOCAL_A_a</computeroutput></listitem> + <listitem><computeroutput>BOOST_PROTO_LOCAL_a</computeroutput></listitem>
+        </itemizedlist>
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_typename_A" kind="functionlike">
+    <macro-parameter name="N"/>
+    <purpose>
+      Generates sequences like
+      <computeroutput>
+        typename A<subscript>0</subscript>,
+        typename A<subscript>1</subscript>, ...
+        typename A<subscript>N-1</subscript>
+      </computeroutput>.
+    </purpose>
+    <description>
+      <para>
+ Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput> + and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
+      </para>
+      <para>
+ <computeroutput>BOOST_PROTO_typename_A(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
+      </para>
+      <para>
+ <programlisting>typename A<subscript>0</subscript>, typename A<subscript>1</subscript>, ... typename A<subscript>N-1</subscript></programlisting>
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_A_const_ref" kind="functionlike">
+    <macro-parameter name="N"/>
+    <purpose>
+      Generates sequences like
+      <computeroutput>
+        A<subscript>0</subscript> const &amp;,
+        A<subscript>1</subscript> const &amp;, ...
+        A<subscript>N-1</subscript> const &amp;
+      </computeroutput>.
+    </purpose>
+    <description>
+      <para>
+ Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput> + and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
+      </para>
+      <para>
+ <computeroutput>BOOST_PROTO_A_const_ref(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
+      </para>
+      <para>
+ <programlisting>A<subscript>0</subscript> const &amp;, A<subscript>1</subscript> const &amp;, ... A<subscript>N-1</subscript> const &amp;</programlisting>
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_A_ref" kind="functionlike">
+    <macro-parameter name="N"/>
+    <purpose>
+      Generates sequences like
+      <computeroutput>
+        A<subscript>0</subscript> &amp;,
+        A<subscript>1</subscript> &amp;, ...
+        A<subscript>N-1</subscript> &amp;
+      </computeroutput>.
+    </purpose>
+    <description>
+      <para>
+ Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput> + and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
+      </para>
+      <para>
+ <computeroutput>BOOST_PROTO_A_ref(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
+      </para>
+      <para>
+ <programlisting>A<subscript>0</subscript> &amp;, A<subscript>1</subscript> &amp;, ... A<subscript>N-1</subscript> &amp;</programlisting>
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_A" kind="functionlike">
+    <macro-parameter name="N"/>
+    <purpose>
+      Generates sequences like
+      <computeroutput>
+        A<subscript>0</subscript>,
+        A<subscript>1</subscript>, ...
+        A<subscript>N-1</subscript>
+      </computeroutput>.
+    </purpose>
+    <description>
+      <para>
+ Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput> + and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
+      </para>
+      <para>
+ <computeroutput>BOOST_PROTO_A(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
+      </para>
+      <para>
+ <programlisting>A<subscript>0</subscript>, A<subscript>1</subscript>, ... A<subscript>N-1</subscript></programlisting>
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_A_const" kind="functionlike">
+    <macro-parameter name="N"/>
+    <purpose>
+      Generates sequences like
+      <computeroutput>
+        A<subscript>0</subscript> const,
+        A<subscript>1</subscript> const, ...
+        A<subscript>N-1</subscript> const
+      </computeroutput>.
+    </purpose>
+    <description>
+      <para>
+ Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput> + and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
+      </para>
+      <para>
+ <computeroutput>BOOST_PROTO_A_const(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
+      </para>
+      <para>
+ <programlisting>A<subscript>0</subscript> const, A<subscript>1</subscript> const, ... A<subscript>N-1</subscript> const</programlisting>
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_A_const_ref_a" kind="functionlike">
+    <macro-parameter name="N"/>
+    <purpose>
+      Generates sequences like
+      <computeroutput>
+        A<subscript>0</subscript> const &amp; a<subscript>0</subscript>,
+ A<subscript>1</subscript> const &amp; a<subscript>1</subscript>, ...
+        A<subscript>N-1</subscript> const &amp; a<subscript>N-1</subscript>
+      </computeroutput>.
+    </purpose>
+    <description>
+      <para>
+ Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput> + and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
+      </para>
+      <para>
+ <computeroutput>BOOST_PROTO_A_const_ref_a(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
+      </para>
+      <para>
+ <programlisting>A<subscript>0</subscript> const &amp; a<subscript>0</subscript>, A<subscript>1</subscript> const &amp; a<subscript>1</subscript>, ... A<subscript>N-1</subscript> const &amp; a<subscript>N-1</subscript></programlisting>
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_A_ref_a" kind="functionlike">
+    <macro-parameter name="N"/>
+    <purpose>
+      Generates sequences like
+      <computeroutput>
+        A<subscript>0</subscript> &amp; a<subscript>0</subscript>,
+        A<subscript>1</subscript> &amp; a<subscript>1</subscript>, ...
+        A<subscript>N-1</subscript> &amp; a<subscript>N-1</subscript>
+      </computeroutput>.
+    </purpose>
+    <description>
+      <para>
+ Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput> + and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
+      </para>
+      <para>
+ <computeroutput>BOOST_PROTO_A_ref_a(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
+      </para>
+      <para>
+ <programlisting>A<subscript>0</subscript> &amp; a<subscript>0</subscript>, A<subscript>1</subscript> &amp; a<subscript>1</subscript>, ... A<subscript>N-1</subscript> &amp; a<subscript>N-1</subscript></programlisting>
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_ref_a" kind="functionlike">
+    <macro-parameter name="N"/>
+    <purpose>
+      Generates sequences like
+      <computeroutput>
+        boost::ref(a<subscript>0</subscript>),
+        boost::ref(a<subscript>1</subscript>), ...
+        boost::ref(a<subscript>N-1</subscript>)
+      </computeroutput>.
+    </purpose>
+    <description>
+      <para>
+ Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput> + and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
+      </para>
+      <para>
+ <computeroutput>BOOST_PROTO_ref_a(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
+      </para>
+      <para>
+ <programlisting>boost::ref(a<subscript>0</subscript>), boost::ref(a<subscript>1</subscript>), ... boost::ref(a<subscript>N-1</subscript>)</programlisting>
+      </para>
+    </description>
+  </macro>
+
+  <macro name="BOOST_PROTO_a" kind="functionlike">
+    <macro-parameter name="N"/>
+    <purpose>
+      Generates sequences like
+      <computeroutput>
+        a<subscript>0</subscript>,
+        a<subscript>1</subscript>, ...
+        a<subscript>N-1</subscript>
+      </computeroutput>.
+    </purpose>
+    <description>
+      <para>
+ Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput> + and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
+      </para>
+      <para>
+ <computeroutput>BOOST_PROTO_a(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
+      </para>
+      <para>
+ <programlisting>a<subscript>0</subscript>, a<subscript>1</subscript>, ... a<subscript>N-1</subscript></programlisting>
+      </para>
+    </description>
+  </macro>
+
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/tags.xml    Mon Nov 30 05:58:26 2009
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/tags.hpp">
+  <para>Contains the tags for all the overloadable operators in C++ </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="tag">
+        <struct name="terminal">
+ <purpose>Tag type for terminals; aka, leaves in the expression tree. </purpose>
+        </struct>
+        <struct name="unary_plus">
+          <purpose>Tag type for the unary + operator. </purpose>
+        </struct>
+        <struct name="negate">
+          <purpose>Tag type for the unary - operator. </purpose>
+        </struct>
+        <struct name="dereference">
+          <purpose>Tag type for the unary * operator. </purpose>
+        </struct>
+        <struct name="complement">
+          <purpose>Tag type for the unary ~ operator. </purpose>
+        </struct>
+        <struct name="address_of">
+          <purpose>Tag type for the unary &amp; operator. </purpose>
+        </struct>
+        <struct name="logical_not">
+          <purpose>Tag type for the unary ! operator. </purpose>
+        </struct>
+        <struct name="pre_inc">
+          <purpose>Tag type for the unary prefix ++ operator. </purpose>
+        </struct>
+        <struct name="pre_dec">
+          <purpose>Tag type for the unary prefix -- operator. </purpose>
+        </struct>
+        <struct name="post_inc">
+          <purpose>Tag type for the unary postfix ++ operator. </purpose>
+        </struct>
+        <struct name="post_dec">
+          <purpose>Tag type for the unary postfix -- operator. </purpose>
+        </struct>
+        <struct name="shift_left">
+          <purpose>Tag type for the binary &lt;&lt; operator. </purpose>
+        </struct>
+        <struct name="shift_right">
+          <purpose>Tag type for the binary &gt;&gt; operator. </purpose>
+        </struct>
+        <struct name="multiplies">
+          <purpose>Tag type for the binary * operator. </purpose>
+        </struct>
+        <struct name="divides">
+          <purpose>Tag type for the binary / operator. </purpose>
+        </struct>
+        <struct name="modulus">
+          <purpose>Tag type for the binary % operator. </purpose>
+        </struct>
+        <struct name="plus">
+          <purpose>Tag type for the binary + operator. </purpose>
+        </struct>
+        <struct name="minus">
+          <purpose>Tag type for the binary - operator. </purpose>
+        </struct>
+        <struct name="less">
+          <purpose>Tag type for the binary &lt; operator. </purpose>
+        </struct>
+        <struct name="greater">
+          <purpose>Tag type for the binary &gt; operator. </purpose>
+        </struct>
+        <struct name="less_equal">
+          <purpose>Tag type for the binary &lt;= operator. </purpose>
+        </struct>
+        <struct name="greater_equal">
+          <purpose>Tag type for the binary &gt;= operator. </purpose>
+        </struct>
+        <struct name="equal_to">
+          <purpose>Tag type for the binary == operator. </purpose>
+        </struct>
+        <struct name="not_equal_to">
+          <purpose>Tag type for the binary != operator. </purpose>
+        </struct>
+        <struct name="logical_or">
+          <purpose>Tag type for the binary || operator. </purpose>
+        </struct>
+        <struct name="logical_and">
+          <purpose>Tag type for the binary &amp;&amp; operator. </purpose>
+        </struct>
+        <struct name="bitwise_and">
+          <purpose>Tag type for the binary &amp; operator. </purpose>
+        </struct>
+        <struct name="bitwise_or">
+          <purpose>Tag type for the binary | operator. </purpose>
+        </struct>
+        <struct name="bitwise_xor">
+          <purpose>Tag type for the binary ^ operator. </purpose>
+        </struct>
+        <struct name="comma">
+          <purpose>Tag type for the binary , operator. </purpose>
+        </struct>
+        <struct name="mem_ptr">
+          <purpose>Tag type for the binary -&gt;* operator. </purpose>
+        </struct>
+        <struct name="assign">
+          <purpose>Tag type for the binary = operator. </purpose>
+        </struct>
+        <struct name="shift_left_assign">
+          <purpose>Tag type for the binary &lt;&lt;= operator. </purpose>
+        </struct>
+        <struct name="shift_right_assign">
+          <purpose>Tag type for the binary &gt;&gt;= operator. </purpose>
+        </struct>
+        <struct name="multiplies_assign">
+          <purpose>Tag type for the binary *= operator. </purpose>
+        </struct>
+        <struct name="divides_assign">
+          <purpose>Tag type for the binary /= operator. </purpose>
+        </struct>
+        <struct name="modulus_assign">
+          <purpose>Tag type for the binary = operator. </purpose>
+        </struct>
+        <struct name="plus_assign">
+          <purpose>Tag type for the binary += operator. </purpose>
+        </struct>
+        <struct name="minus_assign">
+          <purpose>Tag type for the binary -= operator. </purpose>
+        </struct>
+        <struct name="bitwise_and_assign">
+          <purpose>Tag type for the binary &amp;= operator. </purpose>
+        </struct>
+        <struct name="bitwise_or_assign">
+          <purpose>Tag type for the binary |= operator. </purpose>
+        </struct>
+        <struct name="bitwise_xor_assign">
+          <purpose>Tag type for the binary ^= operator. </purpose>
+        </struct>
+        <struct name="subscript">
+          <purpose>Tag type for the binary subscript operator. </purpose>
+        </struct>
+        <struct name="if_else_">
+ <purpose>Tag type for the ternary ?: conditional operator. </purpose>
+        </struct>
+        <struct name="function">
+ <purpose>Tag type for the n-ary function call operator. </purpose>
+        </struct>
+      </namespace>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/traits.xml  Mon Nov 30 05:58:26 2009
@@ -0,0 +1,2807 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/traits.hpp">
+ <para>Contains definitions for child&lt;&gt;, child_c&lt;&gt;, left&lt;&gt;, right&lt;&gt;, tag_of&lt;&gt;, and the helper functions child(), child_c(), value(), left() and right(). </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <struct name="is_callable">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <purpose>Boolean metafunction which tells whether a type is a callable + <conceptname>PolymorphicFunctionObject</conceptname> or not.</purpose>
+        <description>
+          <para>
+ <computeroutput>proto::is_callable&lt;&gt;</computeroutput> is used by the + <computeroutput><classname alt="proto::when">proto::when&lt;&gt;</classname></computeroutput> + transform to determine whether a function type <computeroutput>R(A<subscript>1</subscript>,...A<subscript>n</subscript>)</computeroutput> + is a <conceptname>CallableTransform</conceptname> or an <conceptname>ObjectTransform</conceptname>. + The former are evaluated using <computeroutput><classname>proto::call&lt;&gt;</classname></computeroutput> + and the later with <computeroutput><classname>proto::make&lt;&gt;</classname></computeroutput>. + If <computeroutput>proto::is_callable&lt;R&gt;::value</computeroutput> is <computeroutput>true</computeroutput>, + the function type is a <conceptname>CallableTransform</conceptname>; otherwise, it is an <conceptname>ObjectTransform</conceptname>.
+          </para>
+          <para>
+            Unless specialized for a type
+ <computeroutput>T</computeroutput>, <computeroutput>proto::is_callable&lt;T&gt;::value</computeroutput>
+            is computed as follows:
+            <itemizedlist>
+              <listitem>
+                <para>
+                  If <computeroutput>T</computeroutput> is a template type
+ <computeroutput>X&lt;Y<subscript>0</subscript>,...Y<subscript>n</subscript>&gt;</computeroutput>, + where all <computeroutput>Y<subscript>x</subscript></computeroutput> are types for + <computeroutput>x</computeroutput> in <computeroutput>[0,n]</computeroutput>, + <computeroutput>proto::is_callable&lt;T&gt;::value</computeroutput> is + <computeroutput>boost::is_same&lt;Y<subscript>n</subscript>, <classname>proto::callable</classname>&gt;::value</computeroutput>.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+ If <computeroutput>T</computeroutput> is derived from <computeroutput><classname>proto::callable</classname></computeroutput>, + <computeroutput>proto::is_callable&lt;T&gt;::value</computeroutput> is <computeroutput>true</computeroutput>.
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+ Otherwise, <computeroutput>proto::is_callable&lt;T&gt;::value</computeroutput>
+                  is <computeroutput>false</computeroutput>.
+                </para>
+              </listitem>
+            </itemizedlist>
+          </para>
+        </description>
+ <inherit><type>mpl::bool_&lt;<replaceable>true-or-false</replaceable>&gt;</type></inherit>
+      </struct>
+
+      <struct name="is_aggregate">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <purpose>A Boolean metafunction that indicates whether a type requires aggregate initialization. </purpose>
+        <description>
+          <para>
+ <computeroutput>proto::is_aggregate&lt;&gt;</computeroutput> is used by the + <computeroutput><classname>proto::make&lt;&gt;</classname></computeroutput> transform to determine how + to construct an object of some type <computeroutput>T</computeroutput>, given some initialization arguments + <computeroutput>a<subscript>0</subscript>,...a<subscript>n</subscript></computeroutput>. + If <computeroutput>proto::is_aggregate&lt;T&gt;::value</computeroutput> is <computeroutput>true</computeroutput>, + then an object of type <computeroutput>T</computeroutput> will be initialized as + <computeroutput>T t = {a<subscript>0</subscript>,...a<subscript>n</subscript>};</computeroutput>.
+            Otherwise, it will be initialized as
+ <computeroutput>T t(a<subscript>0</subscript>,...a<subscript>n</subscript>)</computeroutput>.
+          </para>
+          <para>
+ Note: <computeroutput><classname>proto::expr&lt;&gt;</classname> is an aggregate.</computeroutput>
+          </para>
+        </description>
+ <inherit><type>mpl::bool_&lt;<replaceable>true-or-false</replaceable>&gt;</type></inherit>
+      </struct>
+
+      <namespace name="functional">
+        <struct name="as_expr">
+          <template>
+            <template-type-parameter name="Domain">
+ <default><classname>proto::default_domain</classname></default>
+            </template-type-parameter>
+          </template>
+ <purpose>A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the + <computeroutput><functionname alt="proto::as_expr">proto::as_expr()</functionname></computeroutput> function.
+          </purpose>
+ <inherit><type><classname>proto::callable</classname></type></inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="T"/>
+            </template>
+            <specialization>
+              <template-arg>This(T)</template-arg>
+            </specialization>
+ <inherit><type><classname>proto::result_of::as_expr</classname>&lt; T, Domain &gt;</type></inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::as_expr</classname>&lt; T, Domain &gt;::type</type>
+              <template>
+                <template-type-parameter name="T"/>
+              </template>
+              <parameter name="t">
+                <paramtype>T &amp;</paramtype>
+                <description>
+                  <para>The object to wrap. </para>
+                </description>
+              </parameter>
+              <description>
+                <para>
+ Wrap an object in a Proto terminal if it isn't a Proto expression already.
+                </para>
+              </description>
+              <returns>
+                <para>
+ <computeroutput><functionname>proto::as_expr</functionname>&lt;Domain&gt;(t)</computeroutput>
+                </para>
+              </returns>
+            </method>
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::as_expr</classname>&lt; T const, Domain &gt;::type</type>
+              <template>
+                <template-type-parameter name="T"/>
+              </template>
+              <parameter name="t">
+                <paramtype>T const &amp;</paramtype>
+              </parameter>
+              <description>
+ <para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
+              </description>
+            </method>
+          </method-group>
+        </struct>
+
+        <struct name="as_child">
+          <template>
+            <template-type-parameter name="Domain">
+ <default><classname>proto::default_domain</classname></default>
+            </template-type-parameter>
+          </template>
+          <purpose>
+ A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the + <computeroutput><functionname alt="proto::as_child">proto::as_child()</functionname></computeroutput> function.
+          </purpose>
+ <inherit><type><classname>proto::callable</classname></type></inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="T"/>
+            </template>
+            <specialization>
+              <template-arg>This(T)</template-arg>
+            </specialization>
+ <inherit><type><classname>proto::result_of::as_child</classname>&lt; T, Domain &gt;</type></inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::as_child</classname>&lt; T, Domain &gt;::type</type>
+              <template>
+                <template-type-parameter name="T"/>
+              </template>
+              <parameter name="t">
+                <paramtype>T &amp;</paramtype>
+                <description>
+                  <para>The object to wrap. </para>
+                </description>
+              </parameter>
+              <description>
+                <para>
+ Wrap an object in a Proto terminal if it isn't a Proto expression already.
+                </para>
+              </description>
+              <returns>
+                <para>
+ <computeroutput><functionname>proto::as_child</functionname>&lt;Domain&gt;(t)</computeroutput>
+                </para>
+              </returns>
+            </method>
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::as_child</classname>&lt; T const, Domain &gt;::type</type>
+              <template>
+                <template-type-parameter name="T"/>
+              </template>
+              <parameter name="t">
+                <paramtype>T const &amp;</paramtype>
+              </parameter>
+              <description>
+ <para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
+              </description>
+            </method>
+          </method-group>
+        </struct>
+
+        <struct name="child_c">
+          <template>
+            <template-nontype-parameter name="N">
+              <type>long</type>
+            </template-nontype-parameter>
+          </template>
+          <purpose>
+ A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the + <computeroutput><functionname alt="proto::child_c">proto::child_c()</functionname></computeroutput> function.
+          </purpose>
+ <inherit><type><classname>proto::callable</classname></type></inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <specialization>
+              <template-arg>This(Expr)</template-arg>
+            </specialization>
+ <inherit><type><classname>proto::result_of::child_c</classname>&lt; Expr, N &gt;</type></inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::child_c</classname>&lt; Expr &amp;, N &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr &amp;</paramtype>
+                <description>
+                  <para>The expression node. </para>
+                </description>
+              </parameter>
+              <description>
+                <para>
+ Return the <replaceable>N</replaceable><superscript>th</superscript> child of the given expression.
+                </para>
+              </description>
+              <requires>
+                <para>
+ <computeroutput><classname>proto::is_expr</classname>&lt;Expr&gt;::value</computeroutput> is
+                  <computeroutput>true</computeroutput>
+                </para>
+                <para>
+ <computeroutput>N &lt; Expr::proto_arity::value</computeroutput>
+                </para>
+              </requires>
+              <returns>
+                <para>
+ <computeroutput><functionname>proto::child_c</functionname>&lt;N&gt;(expr)</computeroutput>
+                </para>
+              </returns>
+              <throws>
+                <simpara>Will not throw.</simpara>
+              </throws>
+            </method>
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::child_c</classname>&lt; Expr const &amp;, N &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr const &amp;</paramtype>
+              </parameter>
+              <description>
+ <para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
+              </description>
+            </method>
+          </method-group>
+        </struct>
+
+        <struct name="child">
+          <template>
+            <template-type-parameter name="N">
+              <default>mpl::long_&lt;0&gt;</default>
+            </template-type-parameter>
+          </template>
+ <purpose>A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the + <computeroutput><functionname alt="proto::child">proto::child()</functionname></computeroutput> function.</purpose>
+          <description>
+            <para>
+ A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the + <computeroutput><functionname alt="proto::child">proto::child()</functionname></computeroutput> + function. <computeroutput>N</computeroutput> is required to be an MPL Integral Constant.
+            </para>
+          </description>
+ <inherit><type><classname>proto::callable</classname></type></inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <specialization>
+              <template-arg>This(Expr)</template-arg>
+            </specialization>
+            <inherit>
+ <type><classname>proto::result_of::child</classname>&lt; Expr, N &gt;</type>
+            </inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::child</classname>&lt; Expr &amp;, N &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr &amp;</paramtype>
+                <description>
+                  <para>The expression node. </para>
+                </description>
+              </parameter>
+              <description>
+                <para>
+ Return the <replaceable>N</replaceable><superscript>th</superscript> child of the given expression.
+                </para>
+              </description>
+              <requires>
+                <para>
+ <computeroutput><classname>proto::is_expr</classname>&lt;Expr&gt;::value</computeroutput> is
+                  <computeroutput>true</computeroutput>
+                </para>
+                <para>
+ <computeroutput>N::value &lt; Expr::proto_arity::value</computeroutput>
+                </para>
+              </requires>
+              <returns>
+                <para>
+ <computeroutput><functionname>proto::child</functionname>&lt;N&gt;(expr)</computeroutput>
+                </para>
+              </returns>
+              <throws>
+                <simpara>Will not throw.</simpara>
+              </throws>
+            </method>
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::child</classname>&lt; Expr const &amp;, N &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr const &amp;</paramtype>
+              </parameter>
+              <description>
+ <para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
+              </description>
+            </method>
+          </method-group>
+        </struct>
+
+        <struct name="value">
+          <purpose>
+ A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the + <computeroutput><functionname alt="proto::value">proto::value()</functionname></computeroutput> function.
+          </purpose>
+ <inherit><type><classname>proto::callable</classname></type></inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <specialization>
+              <template-arg>This(Expr)</template-arg>
+            </specialization>
+            <inherit>
+ <type><classname>proto::result_of::value</classname>&lt; Expr &gt;</type>
+            </inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::value</classname>&lt; Expr &amp; &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr &amp;</paramtype>
+                <description>
+                  <para>The terminal expression node. </para>
+                </description>
+              </parameter>
+              <description>
+                <para>
+                  Return the value of the given terminal expression.
+                </para>
+              </description>
+              <requires>
+                <para>
+ <computeroutput><classname>proto::is_expr</classname>&lt;Expr&gt;::value</computeroutput> is
+                  <computeroutput>true</computeroutput>
+                </para>
+                <para>
+ <computeroutput>0 == Expr::proto_arity::value</computeroutput>
+                </para>
+              </requires>
+              <returns>
+                <para>
+ <computeroutput><functionname>proto::value</functionname>(expr)</computeroutput>
+                </para>
+              </returns>
+              <throws>
+                <simpara>Will not throw.</simpara>
+              </throws>
+            </method>
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::value</classname>&lt; Expr const &amp; &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr const &amp;</paramtype>
+              </parameter>
+              <description>
+ <para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
+              </description>
+            </method>
+          </method-group>
+        </struct>
+
+        <struct name="left">
+ <purpose>A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the + <computeroutput><functionname alt="proto::left">proto::left()</functionname></computeroutput> function.</purpose>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <specialization>
+              <template-arg>This(Expr)</template-arg>
+            </specialization>
+            <inherit>
+ <type><classname>proto::result_of::left</classname>&lt; Expr &gt;</type>
+            </inherit>
+          </struct-specialization>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::left</classname>&lt; Expr &amp; &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr &amp;</paramtype>
+                <description>
+                  <para>The expression node. </para>
+                </description>
+              </parameter>
+              <description>
+                <para>
+                  Return the left child of the given binary expression.
+                </para>
+              </description>
+              <requires>
+                <para>
+ <computeroutput><classname>proto::is_expr</classname>&lt;Expr&gt;::value</computeroutput> is
+                  <computeroutput>true</computeroutput>
+                </para>
+                <para>
+ <computeroutput>2 == Expr::proto_arity::value</computeroutput>
+                </para>
+              </requires>
+              <returns>
+                <para>
+ <computeroutput><functionname>proto::left</functionname>(expr)</computeroutput>
+                </para>
+              </returns>
+              <throws>
+                <simpara>Will not throw.</simpara>
+              </throws>
+            </method>
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::left</classname>&lt; Expr const &amp; &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr const &amp;</paramtype>
+              </parameter>
+              <description>
+ <para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
+              </description>
+            </method>
+          </method-group>
+        </struct>
+
+        <struct name="right">
+ <purpose>A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the + <computeroutput><functionname alt="proto::right">proto::right()</functionname></computeroutput> function.</purpose>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <specialization>
+              <template-arg>This(Expr)</template-arg>
+            </specialization>
+            <inherit>
+ <type><classname>proto::result_of::right</classname>&lt; Expr &gt;</type>
+            </inherit>
+          </struct-specialization>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::right</classname>&lt; Expr &amp; &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr &amp;</paramtype>
+                <description>
+                  <para>The expression node. </para>
+                </description>
+              </parameter>
+              <description>
+ <para>Return the right child of the given binary expression.</para>
+              </description>
+              <requires>
+                <para>
+ <computeroutput><classname>proto::is_expr</classname>&lt;Expr&gt;::value</computeroutput> is <computeroutput>true</computeroutput>
+                </para>
+                <para>
+ <computeroutput>2 == Expr::proto_arity::value</computeroutput>
+                </para>
+              </requires>
+              <returns>
+                <para>
+ <computeroutput><functionname>proto::right</functionname>(expr)</computeroutput>
+                </para>
+              </returns>
+              <throws>
+                <simpara>Will not throw.</simpara>
+              </throws>
+            </method>
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::right</classname>&lt; Expr const &amp; &gt;::type</type>
+              <template>
+                <template-type-parameter name="Expr"/>
+              </template>
+              <parameter name="expr">
+                <paramtype>Expr const &amp;</paramtype>
+              </parameter>
+            </method>
+          </method-group>
+        </struct>
+      </namespace>
+
+      <struct name="terminal">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; terminal&lt;T&gt; &gt;</inherit> + <purpose>A metafunction for generating terminal expression types, a grammar element for matching
+          terminal expressions, and
+ a <conceptname>PrimitiveTransform</conceptname> that returns the current expression unchanged. </purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
+          <typedef name="result_type">
+            <type>Expr</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>Expr</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+                <description>
+                  <para>The current expression </para>
+                </description>
+              </parameter>
+              <parameter name="">
+                <paramtype>typename impl::state_param</paramtype>
+              </parameter>
+              <parameter name="">
+                <paramtype>typename impl::data_param</paramtype>
+              </parameter>
+              <requires>
+                <para>
+ <computeroutput><classname>proto::matches</classname>&lt;Expr, proto::terminal&lt;T&gt; &gt;::value</computeroutput> is <computeroutput>true</computeroutput>.
+                </para>
+              </requires>
+              <returns>
+                <para>
+                  <computeroutput>expr</computeroutput>
+                </para>
+              </returns>
+              <throws>
+                <simpara>Will not throw.</simpara>
+              </throws>
+            </method>
+          </method-group>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::terminal</classname>, <classname>proto::term</classname>&lt; T &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
+      </struct>
+
+      <struct name="if_else_">
+        <template>
+          <template-type-parameter name="T"/>
+          <template-type-parameter name="U"/>
+          <template-type-parameter name="V"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; if_else_&lt;T, U, V&gt; &gt;</inherit> + <purpose>A metafunction for generating ternary conditional expression types, a grammar element for
+          matching ternary conditional expressions, and
+          a <conceptname>PrimitiveTransform</conceptname>
+          that dispatches to the
+ <computeroutput><classname alt="proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput>
+          transform.</purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+ <type><classname>proto::pass_through</classname>&lt;if_else_&gt;::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::if_else_</classname>, <classname alt="proto::listN">proto::list3</classname>&lt; T, U, V &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
+      </struct>
+
+      <struct name="unary_plus">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; unary_plus&lt;T&gt; &gt;</inherit>
+        <purpose>A metafunction for generating unary plus expression types,
+          a grammar element for matching unary plus expressions, and
+ a <conceptname>PrimitiveTransform</conceptname> that dispatches to the + <computeroutput><classname alt="proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput>
+          transform.</purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+ <type><classname>proto::pass_through</classname>&lt;unary_plus&gt;::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::unary_plus</classname>, <classname alt="proto::listN">proto::list1</classname>&lt; T &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
+      </struct>
+
+      <struct name="negate">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; negate&lt;T&gt; &gt;</inherit> + <purpose>A metafunction for generating unary minus expression types,
+          a grammar element for matching unary minus expressions, and
+ a <conceptname>PrimitiveTransform</conceptname> that dispatches to the + <computeroutput><classname alt="proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput>
+          transform.</purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+ <type><classname>proto::pass_through</classname>&lt;negate&gt;::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::negate</classname>, <classname alt="proto::listN">proto::list1</classname>&lt; T &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
+      </struct>
+
+      <struct name="dereference">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; dereference&lt;T&gt; &gt;</inherit> + <purpose>A metafunction for generating defereference expression types,
+          a grammar element for matching dereference expressions, and
+ a <conceptname>PrimitiveTransform</conceptname> that dispatches to the + <computeroutput><classname alt="proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput>
+          transform.</purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+ <type><classname>proto::pass_through</classname>&lt;dereference&gt;::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::dereference</classname>, <classname alt="proto::listN">proto::list1</classname>&lt; T &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
+      </struct>
+
+      <struct name="complement">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; complement&lt;T&gt; &gt;</inherit>
+        <purpose>A metafunction for generating complement expression types,
+          a grammar element for matching complement expressions, and
+ a <conceptname>PrimitiveTransform</conceptname> that dispatches to the + <computeroutput><classname alt="proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput>
+          transform.</purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+ <type><classname>proto::pass_through</classname>&lt;complement&gt;::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::complement</classname>, <classname alt="proto::listN">proto::list1</classname>&lt; T &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
+      </struct>
+
+      <struct name="address_of">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; address_of&lt;T&gt; &gt;</inherit>
+        <purpose>A metafunction for generating address_of expression types,
+          a grammar element for matching address_of expressions, and
+ a <conceptname>PrimitiveTransform</conceptname> that dispatches to the + <computeroutput><classname alt="proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput>
+          transform.</purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+ <type><classname>proto::pass_through</classname>&lt;address_of&gt;::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::address_of</classname>, <classname alt="proto::listN">proto::list1</classname>&lt; T &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
+      </struct>
+
+      <struct name="logical_not">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; logical_not&lt;T&gt; &gt;</inherit> + <purpose>A metafunction for generating logical_not expression types,
+          a grammar element for matching logical_not expressions, and
+ a <conceptname>PrimitiveTransform</conceptname> that dispatches to the + <computeroutput><classname alt="proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput>
+          transform.</purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+ <type><classname>proto::pass_through</classname>&lt;logical_not&gt;::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::logical_not</classname>, <classname alt="proto::listN">proto::list1</classname>&lt; T &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
+      </struct>
+
+      <struct name="pre_inc">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; pre_inc&lt;T&gt; &gt;</inherit> + <purpose>A metafunction for generating pre-increment expression types,
+          a grammar element for matching pre-increment expressions, and
+ a <conceptname>PrimitiveTransform</conceptname> that dispatches to the + <computeroutput><classname alt="proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput>
+          transform.</purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+ <type><classname>proto::pass_through</classname>&lt;pre_inc&gt;::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::pre_inc</classname>, <classname alt="proto::listN">proto::list1</classname>&lt; T &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
+      </struct>
+
+      <struct name="pre_dec">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; pre_dec&lt;T&gt; &gt;</inherit> + <purpose>A metafunction for generating pre-decrement expression types,
+          a grammar element for matching pre-decrement expressions, and
+ a <conceptname>PrimitiveTransform</conceptname> that dispatches to the + <computeroutput><classname alt="proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput>
+          transform.</purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+ <type><classname>proto::pass_through</classname>&lt;pre_dec&gt;::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::pre_dec</classname>, <classname alt="proto::listN">proto::list1</classname>&lt; T &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
+      </struct>
+
+      <struct name="post_inc">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; post_inc&lt;T&gt; &gt;</inherit> + <purpose>A metafunction for generating post-increment expression types,
+          a grammar element for matching post-increment expressions, and
+ a <conceptname>PrimitiveTransform</conceptname> that dispatches to the + <computeroutput><classname alt="proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput>
+          transform.</purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+ <type><classname>proto::pass_through</classname>&lt;post_inc&gt;::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::post_inc</classname>, <classname alt="proto::listN">proto::list1</classname>&lt; T &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
+      </struct>
+
+      <struct name="post_dec">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; post_dec&lt;T&gt; &gt;</inherit> + <purpose>A metafunction for generating post-decrement expression types,
+          a grammar element for matching post-decrement expressions, and
+ a <conceptname>PrimitiveTransform</conceptname> that dispatches to the + <computeroutput><classname alt="proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput>
+          transform.</purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+ <type><classname>proto::pass_through</classname>&lt;post_dec&gt;::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::post_dec</classname>, <classname alt="proto::listN">proto::list1</classname>&lt; T &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
+      </struct>
+
+      <struct name="shift_left">
+        <template>
+          <template-type-parameter name="T"/>
+          <template-type-parameter name="U"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; shift_left&lt;T, U&gt; &gt;</inherit>
+        <purpose>A metafunction for generating left-shift expression types,
+          a grammar element for matching left-shift expressions, and
+ a <conceptname>PrimitiveTransform</conceptname> that dispatches to the + <computeroutput><classname alt="proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput>
+          transform.</purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+ <type><classname>proto::pass_through</classname>&lt;shift_left&gt;::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::shift_left</classname>, <classname alt="proto::listN">proto::list2</classname>&lt; T, U &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
+      </struct>
+
+      <struct name="shift_right">
+        <template>
+          <template-type-parameter name="T"/>
+          <template-type-parameter name="U"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; shift_right&lt;T, U&gt; &gt;</inherit> + <purpose>A metafunction for generating right-shift expression types,
+          a grammar element for matching right-shift expressions, and a
+ <conceptname>PrimitiveTransform</conceptname> that dispatches to the + <computeroutput><classname alt="proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput>
+          transform.</purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+ <type><classname>proto::pass_through</classname>&lt;shift_right&gt;::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::shift_right</classname>, <classname alt="proto::listN">proto::list2</classname>&lt; T, U &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
+      </struct>
+
+      <struct name="multiplies">
+        <template>
+          <template-type-parameter name="T"/>
+          <template-type-parameter name="U"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; multiplies&lt;T, U&gt; &gt;</inherit>
+        <purpose>A metafunction for generating multiplies expression types,
+          a grammar element for matching multiplies expressions, and
+ a <conceptname>PrimitiveTransform</conceptname> that dispatches to the + <computeroutput><classname alt="proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput>
+          transform.</purpose>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+ <type><classname>proto::pass_through</classname>&lt;multiplies&gt;::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+        <typedef name="type">
+ <type><classname>proto::expr</classname>&lt; <classname>proto::tag::multiplies</classname>, <classname alt="proto::listN">proto::list2</classname>&lt; T, U &gt; &gt;</type>
+        </typedef>
+        <typedef name="proto_base_expr">
+          <type>type</type>
+        </typedef>
***The diff for this file has been truncated for email.***
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/transform/arg.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/transform/arg.hpp">
+  <para>Contains definition of the childN transforms and friends.</para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <struct name="_expr">
+ <inherit><classname>proto::transform</classname>&lt; _expr &gt;</inherit> + <purpose>A <conceptname>PrimitiveTransform</conceptname> that returns the current expression unmodified. </purpose>
+        <description>
+          <para>
+            Example:
+ <programlisting><classname>proto::terminal</classname>&lt;int&gt;::type i = {42}; +<classname>proto::terminal</classname>&lt;int&gt;::type &amp; j = proto::_expr()(i);
+assert( boost::addressof(i) == boost::addressof(j) );</programlisting>
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
+          <typedef name="result_type">
+            <type>Expr</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>Expr</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+                <description>
+                  <para>The current expression. </para>
+                </description>
+              </parameter>
+              <parameter name="">
+                <paramtype>typename impl::state_param</paramtype>
+              </parameter>
+              <parameter name="">
+                <paramtype>typename impl::data_param</paramtype>
+              </parameter>
+              <description>
+                <para>
+                  Returns the current expression.
+                </para>
+              </description>
+              <returns>
+                <para>
+                  <computeroutput>expr</computeroutput>
+                </para>
+              </returns>
+              <throws>
+                <simpara>Will not throw.</simpara>
+              </throws>
+            </method>
+          </method-group>
+        </struct>
+      </struct>
+
+      <struct name="_state">
+ <inherit><classname>proto::transform</classname>&lt; _state &gt;</inherit> + <purpose>A <conceptname>PrimitiveTransform</conceptname> that returns the current state unmodified. </purpose>
+        <description>
+          <para>
+            Example:
+ <programlisting><classname>proto::terminal</classname>&lt;int&gt;::type i = {42};
+char ch = proto::_state()(i, 'a');
+assert( ch == 'a' );</programlisting>
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
+          <typedef name="result_type">
+            <type>State</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>State</type>
+              <parameter name="">
+                <paramtype>typename impl::expr_param</paramtype>
+              </parameter>
+              <parameter name="state">
+                <paramtype>typename impl::state_param</paramtype>
+                <description>
+                  <para>The current state. </para>
+                </description>
+              </parameter>
+              <parameter name="">
+                <paramtype>typename impl::data_param</paramtype>
+              </parameter>
+              <description>
+                <para>
+                  Returns the current state.
+                </para>
+              </description>
+              <returns>
+                <para>
+                  <computeroutput>state</computeroutput>
+                </para>
+              </returns>
+              <throws>
+                <simpara>Will not throw.</simpara>
+              </throws>
+            </method>
+          </method-group>
+        </struct>
+      </struct>
+
+      <struct name="_data">
+ <inherit><classname>proto::transform</classname>&lt; _data &gt;</inherit> + <purpose>A <conceptname>PrimitiveTransform</conceptname> that returns the current data unmodified. </purpose>
+        <description>
+          <para>
+            Example:
+ <programlisting><classname>proto::terminal</classname>&lt;int&gt;::type i = {42};
+std::string str("hello");
+std::string &amp; data = proto::_data()(i, 'a', str);
+assert( &amp;str == &amp;data );</programlisting>
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
+          <typedef name="result_type">
+            <type>Data</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>Data</type>
+              <parameter name="">
+                <paramtype>typename impl::expr_param</paramtype>
+              </parameter>
+              <parameter name="">
+                <paramtype>typename impl::state_param</paramtype>
+              </parameter>
+              <parameter name="data">
+                <paramtype>typename impl::data_param</paramtype>
+                <description>
+                  <para>The current data. </para>
+                </description>
+              </parameter>
+              <description>
+                <para>
+                  Returns the current data.
+                </para>
+              </description>
+              <returns>
+                <para>
+                  <computeroutput>data</computeroutput>
+                </para>
+              </returns>
+              <throws>
+                <simpara>Will not throw.</simpara>
+              </throws>
+            </method>
+          </method-group>
+        </struct>
+      </struct>
+
+      <struct name="_child_c">
+        <template>
+          <template-nontype-parameter name="N">
+            <type>int</type>
+          </template-nontype-parameter>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; _child_c&lt;N&gt; &gt;</inherit> + <purpose>A <conceptname>PrimitiveTransform</conceptname> that returns N-th child of the current expression. </purpose>
+        <description>
+          <para>
+            Example:
+ <programlisting><classname>proto::terminal</classname>&lt;int&gt;::type i = {42}; +<classname>proto::terminal</classname>&lt;int&gt;::type &amp; j = proto::_child_c&lt;0&gt;()(-i);
+assert( boost::addressof(i) == boost::addressof(j) );</programlisting>
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
+          <typedef name="result_type">
+ <type>typename <classname>proto::result_of::child_c</classname>&lt; Expr, N &gt;::type</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::child_c</classname>&lt; Expr, N &gt;::type</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+                <description>
+                  <para>The current expression. </para>
+                </description>
+              </parameter>
+              <parameter name="">
+                <paramtype>typename impl::state_param</paramtype>
+              </parameter>
+              <parameter name="">
+                <paramtype>typename impl::data_param</paramtype>
+              </parameter>
+              <description>
+                <para>
+ Returns the N-th child of <computeroutput>expr</computeroutput>
+                </para>
+              </description>
+              <requires>
+                <para>
+ <computeroutput>Expr::proto_arity::value &gt; N</computeroutput>
+                </para>
+              </requires>
+              <returns>
+                <para>
+ <computeroutput><functionname>proto::child_c</functionname>&lt;N&gt;(expr)</computeroutput>
+                </para>
+              </returns>
+              <throws>
+                <simpara>Will not throw.</simpara>
+              </throws>
+            </method>
+          </method-group>
+        </struct>
+      </struct>
+
+      <struct name="_value">
+ <inherit><classname>proto::transform</classname>&lt; _value &gt;</inherit> + <purpose>A <conceptname>PrimitiveTransform</conceptname> that returns the value of the current terminal expression. </purpose>
+        <description>
+          <para>
+            Example:
+ <programlisting><classname>proto::terminal</classname>&lt;int&gt;::type i = {42};
+int j = proto::_value()(i);
+assert( 42 == j );</programlisting>
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
+          <typedef name="result_type">
+ <type>typename <classname>proto::result_of::value</classname>&lt; Expr &gt;::type</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+ <type>typename <classname>proto::result_of::value</classname>&lt; Expr &gt;::type</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+                <description>
+                  <para>The current expression. </para>
+                </description>
+              </parameter>
+              <parameter name="">
+                <paramtype>typename impl::state_param</paramtype>
+              </parameter>
+              <parameter name="">
+                <paramtype>typename impl::data_param</paramtype>
+              </parameter>
+              <description>
+                <para>
+                  Returns the value of the specified terminal expression.
+                </para>
+              </description>
+              <requires>
+                <para>
+ <computeroutput>Expr::proto_arity::value == 0</computeroutput>.
+                </para>
+              </requires>
+              <returns>
+                <para>
+ <computeroutput><functionname>proto::value</functionname>(expr)</computeroutput>
+                </para>
+              </returns>
+              <throws>
+                <simpara>Will not throw.</simpara>
+              </throws>
+            </method>
+          </method-group>
+        </struct>
+      </struct>
+
+      <struct name="_byref">
+        <inherit><classname>proto::callable</classname></inherit>
+ <purpose>A unary callable <conceptname>PolymorphicFunctionObject</conceptname> that wraps its argument + in a <computeroutput>boost::reference_wrapper&lt;&gt;</computeroutput>.</purpose>
+        <description>
+          <para>
+            Example:
+ <programlisting><classname>proto::terminal</classname>&lt;int&gt;::type i = {42}; +boost::reference_wrapper&lt;<classname>proto::terminal</classname>&lt;int&gt;::type&gt; j + = <classname>proto::when</classname>&lt;<classname>proto::_</classname>, proto::_byref(_)&gt;()(i); +assert( boost::addressof(i) == boost::addressof(j.get()) );</programlisting>
+          </para>
+        </description>
+        <struct-specialization name="result">
+          <template>
+            <template-type-parameter name="This"/>
+            <template-type-parameter name="T"/>
+          </template>
+          <specialization>
+            <template-arg>This(T &amp;)</template-arg>
+          </specialization>
+          <typedef name="type">
+            <type>boost::reference_wrapper&lt; T &gt; const</type>
+          </typedef>
+        </struct-specialization>
+        <struct-specialization name="result">
+          <template>
+            <template-type-parameter name="This"/>
+            <template-type-parameter name="T"/>
+          </template>
+          <specialization>
+            <template-arg>This(T)</template-arg>
+          </specialization>
+          <typedef name="type">
+            <type>boost::reference_wrapper&lt; T const  &gt; const</type>
+          </typedef>
+        </struct-specialization>
+        <method-group name="public member functions">
+          <method name="operator()" cv="const">
+            <type>boost::reference_wrapper&lt; T &gt; const</type>
+            <template>
+              <template-type-parameter name="T"/>
+            </template>
+            <parameter name="t">
+              <paramtype>T &amp;</paramtype>
+              <description>
+                <para>The object to wrap </para>
+              </description>
+            </parameter>
+            <description>
+              <para>
+                Wrap the parameter <computeroutput>t</computeroutput> in a
+ <computeroutput>boost::reference_wrapper&lt;&gt;</computeroutput>
+              </para>
+            </description>
+            <returns>
+              <para>
+                <computeroutput>boost::ref(t)</computeroutput>
+              </para>
+            </returns>
+            <throws>
+              <simpara>Will not throw.</simpara>
+            </throws>
+          </method>
+          <method name="operator()" cv="const">
+            <type>boost::reference_wrapper&lt; T const &gt; const</type>
+            <template>
+              <template-type-parameter name="T"/>
+            </template>
+            <parameter name="t">
+              <paramtype>T const &amp;</paramtype>
+            </parameter>
+            <description>
+ <para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
+            </description>
+          </method>
+        </method-group>
+      </struct>
+
+      <struct name="_byval">
+        <inherit><classname>proto::callable</classname></inherit>
+        <purpose>
+ A unary callable <conceptname>PolymorphicFunctionObject</conceptname> that strips references and + <computeroutput>boost::reference_wrapper&lt;&gt;</computeroutput> from its argument.
+        </purpose>
+        <description>
+          <para>
+            Example:
+ <programlisting><classname>proto::terminal</classname>&lt;int&gt;::type i = {42};
+int j = 67;
+int k = <classname>proto::when</classname>&lt;<classname>proto::_</classname>, proto::_byval(<classname>proto::_state</classname>)&gt;()(i, boost::ref(j));
+assert( 67 == k );</programlisting>
+          </para>
+        </description>
+        <struct-specialization name="result">
+          <template>
+            <template-type-parameter name="This"/>
+            <template-type-parameter name="T"/>
+          </template>
+          <specialization>
+ <template-arg>This(boost::reference_wrapper&lt; T &gt;)</template-arg>
+          </specialization>
+          <inherit>result&lt;This(T)&gt;</inherit>
+        </struct-specialization>
+        <struct-specialization name="result">
+          <template>
+            <template-type-parameter name="This"/>
+            <template-type-parameter name="T"/>
+          </template>
+          <specialization>
+            <template-arg>This(T &amp;)</template-arg>
+          </specialization>
+          <inherit>result&lt;This(T)&gt;</inherit>
+        </struct-specialization>
+        <struct-specialization name="result">
+          <template>
+            <template-type-parameter name="This"/>
+            <template-type-parameter name="T"/>
+          </template>
+          <specialization>
+            <template-arg>This(T)</template-arg>
+          </specialization>
+          <typedef name="type">
+            <type>T</type>
+          </typedef>
+        </struct-specialization>
+        <method-group name="public member functions">
+          <method name="operator()" cv="const">
+            <type>T</type>
+            <template>
+              <template-type-parameter name="T"/>
+            </template>
+            <parameter name="t">
+              <paramtype>T const &amp;</paramtype>
+              <description>
+                <para>The object to unref </para>
+              </description>
+            </parameter>
+            <returns>
+              <para>
+                <computeroutput>t</computeroutput>
+              </para>
+            </returns>
+            <throws>
+              <simpara>Will not throw.</simpara>
+            </throws>
+          </method>
+          <method name="operator()" cv="const">
+            <type>T</type>
+            <template>
+              <template-type-parameter name="T"/>
+            </template>
+            <parameter name="t">
+ <paramtype>boost::reference_wrapper&lt; T &gt; const &amp;</paramtype>
+            </parameter>
+            <description>
+ <para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
+            </description>
+          </method>
+        </method-group>
+      </struct>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/transform/call.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/transform/call.hpp">
+  <para>Contains definition of the call&lt;&gt; transform. </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <struct name="call">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <purpose>Make the given <conceptname>CallableTransform</conceptname> into a <conceptname>PrimitiveTransform</conceptname>.</purpose>
+
+        <description>
+          <para>
+ The purpose of <computeroutput>proto::call&lt;&gt;</computeroutput> is to annotate a transform as callable + so that <computeroutput><classname alt="proto::when">proto::when&lt;&gt;</classname></computeroutput> knows + how to apply it. The template parameter must be either a <conceptname>PrimitiveTransform</conceptname> or a + <conceptname>CallableTransform</conceptname>; that is, a function type for which the return type is a callable
+            <conceptname>PolymorphicFunctionObject</conceptname>.
+          </para>
+
+          <para>
+ For the complete description of the behavior of the <computeroutput>proto::call&lt;&gt;</computeroutput>
+            transform, see the documentation for the nested
+            <computeroutput>
+ <classname alt="proto::call::impl">proto::call::impl&lt;&gt;</classname>
+            </computeroutput>
+            class template.
+          </para>
+        </description>
+
+ <inherit><type><classname>proto::transform</classname>&lt; call&lt;T&gt; &gt;</type></inherit>
+
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><type><classname>proto::transform_impl</classname>&lt;Expr, State, Data&gt;</type></inherit>
+          <typedef name="result_type">
+            <type><replaceable>see-below</replaceable></type>
+            <description>
+              <para>
+ <computeroutput><classname>proto::call</classname>&lt;T&gt;::impl&lt;Expr,State,Data&gt;::result_type</computeroutput>
+                is computed as follows:
+                <itemizedlist>
+                  <listitem>
+                    <para>
+                      If <computeroutput>T</computeroutput> if of the form
+ <computeroutput><conceptname>PrimitiveTransform</conceptname></computeroutput> or + <computeroutput><conceptname>PrimitiveTransform</conceptname>()</computeroutput>, then
+                      <computeroutput>result_type</computeroutput> is:
+ <programlisting>typename boost::result_of&lt;PrimitiveTransform(Expr, State, Data)&gt;::type</programlisting>
+                    </para>
+                  </listitem>
+                  <listitem>
+                    <para>
+                      If <computeroutput>T</computeroutput> is of the form
+ <computeroutput><conceptname>PrimitiveTransform</conceptname>(A<subscript>0</subscript>)</computeroutput>, then
+                      <computeroutput>result_type</computeroutput> is:
+ <programlisting>typename boost::result_of&lt;PrimitiveTransform( + typename boost::result_of&lt;<classname>when</classname>&lt;<classname>_</classname>,A<subscript>0</subscript>&gt;(Expr, State, Data)&gt;::type,
+  State,
+  Data
+)&gt;::type</programlisting>
+                    </para>
+                  </listitem>
+                  <listitem>
+                    <para>
+                      If <computeroutput>T</computeroutput> is of the form
+ <computeroutput><conceptname>PrimitiveTransform</conceptname>(A<subscript>0</subscript>, A<subscript>1</subscript>)</computeroutput>, then
+                      <computeroutput>result_type</computeroutput> is:
+ <programlisting>typename boost::result_of&lt;PrimitiveTransform( + typename boost::result_of&lt;<classname>when</classname>&lt;<classname>_</classname>,A<subscript>0</subscript>&gt;(Expr, State, Data)&gt;::type, + typename boost::result_of&lt;<classname>when</classname>&lt;<classname>_</classname>,A<subscript>1</subscript>&gt;(Expr, State, Data)&gt;::type,
+  Data
+)&gt;::type</programlisting>
+                    </para>
+                  </listitem>
+                  <listitem>
+                    <para>
+                      If <computeroutput>T</computeroutput> is of the form
+ <computeroutput><conceptname>PrimitiveTransform</conceptname>(A<subscript>0</subscript>, A<subscript>1</subscript>, A<subscript>2</subscript>)</computeroutput>, then
+                      <computeroutput>result_type</computeroutput> is:
+ <programlisting>typename boost::result_of&lt;PrimitiveTransform( + typename boost::result_of&lt;<classname>when</classname>&lt;<classname>_</classname>,A<subscript>0</subscript>&gt;(Expr, State, Data)&gt;::type, + typename boost::result_of&lt;<classname>when</classname>&lt;<classname>_</classname>,A<subscript>1</subscript>&gt;(Expr, State, Data)&gt;::type, + typename boost::result_of&lt;<classname>when</classname>&lt;<classname>_</classname>,A<subscript>2</subscript>&gt;(Expr, State, Data)&gt;::type
+)&gt;::type</programlisting>
+                    </para>
+                  </listitem>
+                  <listitem>
+                    <para>
+                      If <computeroutput>T</computeroutput> is of the form
+ <computeroutput><conceptname>PolymorphicFunctionObject</conceptname>(A<subscript>0</subscript>,...A<subscript>n</subscript>)</computeroutput>, then
+                      <computeroutput>result_type</computeroutput> is:
+ <programlisting>typename boost::result_of&lt;PolymorphicFunctionObject( + typename boost::result_of&lt;<classname>when</classname>&lt;<classname>_</classname>,A<subscript>0</subscript>&gt;(Expr, State, Data)&gt;::type,
+  ...
+ typename boost::result_of&lt;<classname>when</classname>&lt;<classname>_</classname>,A<subscript>n</subscript>&gt;(Expr, State, Data)&gt;::type
+&gt;::type</programlisting>
+                    </para>
+                  </listitem>
+                </itemizedlist>
+              </para>
+            </description>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>result_type</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+              </parameter>
+              <parameter name="state">
+                <paramtype>typename impl::state_param</paramtype>
+              </parameter>
+              <parameter name="data">
+                <paramtype>typename impl::data_param</paramtype>
+              </parameter>
+              <description>
+              <para>
+ <computeroutput><classname>proto::call</classname>&lt;T&gt;::impl&lt;Expr,State,Data&gt;::operator()</computeroutput> behaves as follows:
+                <itemizedlist>
+                  <listitem>
+                    <para>
+                      If <computeroutput>T</computeroutput> if of the form
+ <computeroutput><conceptname>PrimitiveTransform</conceptname></computeroutput> or + <computeroutput><conceptname>PrimitiveTransform</conceptname>()</computeroutput>, then
+                      return
+ <programlisting>PrimitiveTransform()(expr, state, data)</programlisting>
+                    </para>
+                  </listitem>
+                  <listitem>
+                    <para>
+                      If <computeroutput>T</computeroutput> is of the form
+ <computeroutput><conceptname>PrimitiveTransform</conceptname>(A<subscript>0</subscript>)</computeroutput>, then
+                      return
+                      <programlisting>PrimitiveTransform()(
+ <classname>when</classname>&lt;<classname>_</classname>,A<subscript>0</subscript>&gt;()(expr, state, data),
+  state,
+  sata
+)</programlisting>
+                    </para>
+                  </listitem>
+                  <listitem>
+                    <para>
+                      If <computeroutput>T</computeroutput> is of the form
+ <computeroutput><conceptname>PrimitiveTransform</conceptname>(A<subscript>0</subscript>, A<subscript>1</subscript>)</computeroutput>, then
+                      return:
+                      <programlisting>PrimitiveTransform()(
+ <classname>when</classname>&lt;<classname>_</classname>,A<subscript>0</subscript>&gt;()(expr, state, data), + <classname>when</classname>&lt;<classname>_</classname>,A<subscript>1</subscript>&gt;()(expr, state, data),
+  Data
+)</programlisting>
+                    </para>
+                  </listitem>
+                  <listitem>
+                    <para>
+                      If <computeroutput>T</computeroutput> is of the form
+ <computeroutput><conceptname>PrimitiveTransform</conceptname>(A<subscript>0</subscript>, A<subscript>1</subscript>, A<subscript>2</subscript>)</computeroutput>, then
+                      return
+                      <programlisting>PrimitiveTransform()(
+ <classname>when</classname>&lt;<classname>_</classname>,A<subscript>0</subscript>&gt;()(expr, state, data), + <classname>when</classname>&lt;<classname>_</classname>,A<subscript>1</subscript>&gt;()(expr, state, data), + <classname>when</classname>&lt;<classname>_</classname>,A<subscript>2</subscript>&gt;()(expr, state, data)
+)</programlisting>
+                    </para>
+                  </listitem>
+                  <listitem>
+                    <para>
+                      If <computeroutput>T</computeroutput> is of the form
+ <computeroutput><conceptname>PolymorphicFunctionObject</conceptname>(A<subscript>0</subscript>,...A<subscript>n</subscript>)</computeroutput>, then
+                      return:
+                      <programlisting>PolymorphicFunctionObject()(
+ <classname>when</classname>&lt;<classname>_</classname>,A<subscript>0</subscript>&gt;()(expr, state, data),
+  ...
+ <classname>when</classname>&lt;<classname>_</classname>,A<subscript>n</subscript>&gt;()(expr, state, data)
+)</programlisting>
+                    </para>
+                  </listitem>
+                </itemizedlist>
+              </para>
+              </description>
+            </method>
+          </method-group>
+        </struct>
+      </struct>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/transform/default.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/transform/default.hpp">
+  <namespace name="boost">
+    <namespace name="proto">
+      <struct name="_default">
+        <template>
+          <template-type-parameter name="Grammar">
+            <default><replaceable>unspecified</replaceable></default>
+          </template-type-parameter>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; _default&lt;Grammar&gt; &gt;</inherit> + <purpose>A <conceptname>PrimitiveTransform</conceptname> that gives expressions their
+          usual C++ behavior</purpose>
+        <description>
+          <para>
+ For the complete description of the behavior of the <computeroutput>proto::_default</computeroutput> + transform, see the documentation for the nested <computeroutput>
+              <classname>proto::_default::impl&lt;&gt;</classname>
+            </computeroutput> class template.
+          </para>
+          <para>
+ When used without specifying a <computeroutput>Grammar</computeroutput> parameter, + <computeroutput>proto::_default</computeroutput> behaves as if the parameter were
+            <computeroutput>proto::_default&lt;&gt;</computeroutput>.
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><type><classname>proto::transform_impl</classname>&lt;Expr, State, Data&gt;</type></inherit>
+          <typedef name="Tag">
+            <purpose>For exposition only</purpose>
+            <type>typename Expr::tag_type</type>
+          </typedef>
+          <data-member name="s_expr" specifiers="static">
+            <purpose>For exposition only</purpose>
+            <type>Expr</type>
+          </data-member>
+          <data-member name="s_state" specifiers="static">
+            <purpose>For exposition only</purpose>
+            <type>State</type>
+          </data-member>
+          <data-member name="s_data" specifiers="static">
+            <purpose>For exposition only</purpose>
+            <type>Data</type>
+          </data-member>
+          <typedef name="result_type">
+            <type><emphasis>see-below</emphasis></type>
+            <description>
+              <itemizedlist>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> corresponds to a unary prefix operator,
+                    then the result type is
+                    <programlisting>decltype(
+ OP Grammar()(<functionname>proto::child</functionname>(s_expr), s_state, s_data)
+)</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> corresponds to a unary postfix operator,
+                    then the result type is
+                    <programlisting>decltype(
+ Grammar()(<functionname>proto::child</functionname>(s_expr), s_state, s_data) OP
+)</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> corresponds to a binary infix operator,
+                    then the result type is
+                    <programlisting>decltype(
+ Grammar()(<functionname>proto::left</functionname>(s_expr), s_state, s_data) OP + Grammar()(<functionname>proto::right</functionname>(s_expr), s_state, s_data)
+)</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                <para>
+ If <computeroutput>Tag</computeroutput> is <computeroutput>
+                    <classname>proto::tag::subscript</classname>
+                  </computeroutput>,
+                  then the result type is
+                  <programlisting>decltype(
+ Grammar()(<functionname>proto::left</functionname>(s_expr), s_state, s_data) [ + Grammar()(<functionname>proto::right</functionname>(s_expr), s_state, s_data) ]
+)</programlisting>
+                </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> is <computeroutput>
+                      <classname>proto::tag::if_else_</classname>
+                    </computeroutput>,
+                    then the result type is
+                    <programlisting>decltype(
+ Grammar()(<functionname>proto::child_c</functionname>&lt;0&gt;(s_expr), s_state, s_data) ? + Grammar()(<functionname>proto::child_c</functionname>&lt;1&gt;(s_expr), s_state, s_data) : + Grammar()(<functionname>proto::child_c</functionname>&lt;2&gt;(s_expr), s_state, s_data)
+)</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> is <computeroutput>
+                      <classname>proto::tag::function</classname>
+                    </computeroutput>,
+                    then the result type is
+                    <programlisting>decltype(
+ Grammar()(<functionname>proto::child_c</functionname>&lt;0&gt;(s_expr), s_state, s_data) ( + Grammar()(<functionname>proto::child_c</functionname>&lt;1&gt;(s_expr), s_state, s_data),
+  ...
+ Grammar()(<functionname>proto::child_c</functionname>&lt;N&gt;(s_expr), s_state, s_data) )
+)</programlisting>
+                  </para>
+                </listitem>
+              </itemizedlist>
+            </description>
+          </typedef>
+          <description>
+            <para>
+ Let <computeroutput><computeroutput>OP</computeroutput></computeroutput> be the C++ operator + corresponding to <computeroutput>Expr::proto_tag</computeroutput>. (For example, if
+              <computeroutput>Tag</computeroutput> is <computeroutput>
+ <classname>proto::tag::plus</classname></computeroutput>, let <computeroutput> + <computeroutput>OP</computeroutput></computeroutput> be <computeroutput>+</computeroutput>.)
+            </para>
+          </description>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>result_type</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+              </parameter>
+              <parameter name="state">
+                <paramtype>typename impl::state_param</paramtype>
+              </parameter>
+              <parameter name="data">
+                <paramtype>typename impl::data_param</paramtype>
+              </parameter>
+            <description>
+              <computeroutput>
+ <classname>proto::_default</classname>&lt;Grammar&gt;::impl&lt;Expr, State, Data&gt;::operator()
+              </computeroutput> returns the following:
+              <itemizedlist>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> corresponds to a unary prefix operator,
+                    then return
+ <programlisting>OP Grammar()(<functionname>proto::child</functionname>(expr), state, data)</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> corresponds to a unary postfix operator,
+                    then return
+ <programlisting>Grammar()(<functionname>proto::child</functionname>(expr), state, data) OP</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> corresponds to a binary infix operator,
+                    then return
+ <programlisting>Grammar()(<functionname>proto::left</functionname>(expr), state, data) OP +Grammar()(<functionname>proto::right</functionname>(expr), state, data)</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                <para>
+ If <computeroutput>Tag</computeroutput> is <computeroutput>
+                    <classname>proto::tag::subscript</classname>
+                  </computeroutput>,
+                  then return
+ <programlisting>Grammar()(<functionname>proto::left</functionname>(expr), state, data) [ +Grammar()(<functionname>proto::right</functionname>(expr), state, data) ]</programlisting>
+                </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> is <computeroutput>
+                      <classname>proto::tag::if_else_</classname>
+                    </computeroutput>,
+                    then return
+ <programlisting>Grammar()(<functionname>proto::child_c</functionname>&lt;0&gt;(expr), state, data) ? +Grammar()(<functionname>proto::child_c</functionname>&lt;1&gt;(expr), state, data) : +Grammar()(<functionname>proto::child_c</functionname>&lt;2&gt;(expr), state, data)</programlisting>
+                  </para>
+                </listitem>
+                <listitem>
+                  <para>
+ If <computeroutput>Tag</computeroutput> is <computeroutput>
+                      <classname>proto::tag::function</classname>
+                    </computeroutput>,
+                    then return
+ <programlisting>Grammar()(<functionname>proto::child_c</functionname>&lt;0&gt;(expr), state, data) ( +Grammar()(<functionname>proto::child_c</functionname>&lt;1&gt;(expr), state, data),
+...
+Grammar()(<functionname>proto::child_c</functionname>&lt;N&gt;(expr), state, data) )</programlisting>
+                  </para>
+                </listitem>
+              </itemizedlist>
+            </description>
+            </method>
+          </method-group>
+          <description>
+            <para>
+ The behavior of this class is specified in terms of the C++0x <computeroutput>decltype</computeroutput> + keyword. In systems where this keyword is not available, Proto uses the Boost.Typeof library to
+              approximate the behavior.
+            </para>
+          </description>
+        </struct>
+      </struct>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/transform/fold.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/transform/fold.hpp">
+  <para>Contains definition of the
+    <computeroutput>
+      <classname alt="boost::proto::fold">proto::fold&lt;&gt;</classname>
+    </computeroutput> and
+    <computeroutput>
+ <classname alt="boost::proto::reverse_fold">proto::reverse_fold&lt;&gt;</classname>
+    </computeroutput>
+    transforms.</para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <struct name="fold">
+        <template>
+          <template-type-parameter name="Sequence"/>
+          <template-type-parameter name="State0"/>
+          <template-type-parameter name="Fun"/>
+        </template>
+        <inherit>
+ <classname>proto::transform</classname>&lt; fold&lt;Sequence, State0, Fun&gt; &gt;</inherit> + <purpose>A <conceptname>PrimitiveTransform</conceptname> that invokes the + <computeroutput>fusion::fold&lt;&gt;</computeroutput> algorithm to accumulate a value.</purpose>
+        <description>
+          <para>
+ For the complete description of the behavior of the <computeroutput>proto::fold&lt;&gt;</computeroutput> + transform, see the documentation for the nested <computeroutput>
+              <classname>proto::fold::impl&lt;&gt;</classname>
+            </computeroutput> class template.
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
+          <typedef name="X">
+            <purpose>For exposition only</purpose>
+ <type><classname>when</classname>&lt;<classname>_</classname>, Sequence&gt;</type>
+          </typedef>
+          <typedef name="Y">
+            <purpose>For exposition only</purpose>
+ <type><classname>when</classname>&lt;<classname>_</classname>, State0&gt;</type>
+          </typedef>
+          <typedef name="seq">
+            <purpose>A Fusion sequence, for exposition only</purpose>
+ <type>typename boost::result_of&lt;X(Expr, State, Data)&gt;::type</type>
+          </typedef>
+          <typedef name="state0">
+ <purpose>An initial state for the fold, for exposition only</purpose> + <type>typename boost::result_of&lt;Y(Expr, State, Data)&gt;::type</type>
+          </typedef>
+          <typedef name="fun">
+ <purpose><computeroutput>fun(v)(e,s) == when&lt;_,Fun&gt;()(e,s,v)</computeroutput></purpose>
+            <type><emphasis>unspecified</emphasis></type>
+          </typedef>
+          <typedef name="result_type">
+ <type>typename fusion::result_of::fold&lt;seq, state0, fun&gt;::type</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>result_type</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+                <description>
+                  <para>The current expression </para>
+                </description>
+              </parameter>
+              <parameter name="state">
+                <paramtype>typename impl::state_param</paramtype>
+                <description>
+                  <para>The current state </para>
+                </description>
+              </parameter>
+              <parameter name="data">
+                <paramtype>typename impl::data_param</paramtype>
+                <description>
+                  <para>An arbitrary data </para>
+                </description>
+              </parameter>
+              <description>
+                <para>
+                  Let <computeroutput>seq</computeroutput> be
+ <computeroutput><classname>when</classname>&lt;<classname>_</classname>, Sequence&gt;()(expr, state, data)</computeroutput>,
+                  let <computeroutput>state0</computeroutput> be
+ <computeroutput><classname>when</classname>&lt;<classname>_</classname>, State0&gt;()(expr, state, data)</computeroutput>, + and let <computeroutput>fun(data)</computeroutput> be an object such that + <computeroutput>fun(data)(expr, state)</computeroutput> is equivalent to + <computeroutput><classname>when</classname>&lt;<classname>_</classname>, Fun&gt;()(expr, state, data)</computeroutput>. Then, + this function returns <computeroutput>fusion::fold(seq, state0, fun(data))</computeroutput>.
+                </para>
+              </description>
+            </method>
+          </method-group>
+        </struct>
+      </struct>
+
+      <struct name="reverse_fold">
+        <template>
+          <template-type-parameter name="Sequence"/>
+          <template-type-parameter name="State0"/>
+          <template-type-parameter name="Fun"/>
+        </template>
+ <inherit><classname>proto::fold</classname>&lt; <classname>proto::_reverse</classname>(Sequence), State0, Fun &gt;</inherit>
+        <purpose>
+ A <conceptname>PrimitiveTransform</conceptname> that is the same as the <computeroutput><classname>proto::fold&lt;&gt;</classname></computeroutput> + transform, except that it folds back-to-front instead of front-to-back. It uses the
+          <computeroutput>
+            <classname>proto::_reverse</classname>
+ </computeroutput> callable <conceptname>PolymorphicFunctionObject</conceptname> to create a + <computeroutput>fusion::reverse_view&lt;&gt;</computeroutput> of the sequence before invoking
+          <computeroutput>fusion::fold&lt;&gt;</computeroutput>.
+        </purpose>
+      </struct>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/transform/fold_tree.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/transform/fold_tree.hpp">
+  <para>
+    Contains definition of the
+    <computeroutput>
+ <classname alt="boost::proto::fold_tree">proto::fold_tree&lt;&gt;</classname>
+    </computeroutput> and
+    <computeroutput>
+ <classname alt="boost::proto::reverse_fold_tree">proto::reverse_fold_tree&lt;&gt;</classname>
+    </computeroutput>
+    transforms.
+  </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <struct name="fold_tree">
+        <template>
+          <template-type-parameter name="Sequence"/>
+          <template-type-parameter name="State0"/>
+          <template-type-parameter name="Fun"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; fold_tree&lt;Sequence, State0, Fun&gt; &gt;</inherit> + <purpose>A <conceptname>PrimitiveTransform</conceptname> that recursively applies the + <computeroutput><classname>proto::fold</classname>&lt;&gt;</computeroutput> transform to sub-trees
+          that all share a common tag type.</purpose>
+        <description>
+          <para>
+ <computeroutput>proto::fold_tree&lt;&gt;</computeroutput> is useful for flattening trees into lists; + for example, you might use <computeroutput>proto::fold_tree&lt;&gt;</computeroutput> to flatten an + expression tree like <computeroutput>a | b | c</computeroutput> into a Fusion list like
+            <computeroutput>cons(c, cons(b, cons(a)))</computeroutput>.
+          </para>
+          <para>
+ <computeroutput>proto::fold_tree&lt;&gt;</computeroutput> is easily understood in terms of a + <computeroutput>recurse_if_&lt;&gt;</computeroutput> helper, defined as follows:
+            <programlisting> template&lt;typename Tag, typename Fun&gt;
+struct recurse_if_ :
+  <classname>proto::if_</classname>&lt;
+    // If the current node has type type "Tag" ...
+ boost::is_same&lt;<classname>proto::tag_of</classname>&lt;<classname>proto::_</classname>&gt;, Tag&gt;(),
+    // ... recurse, otherwise ...
+ <classname>proto::fold</classname>&lt;<classname>proto::_</classname>, <classname>proto::_state</classname>, recurse_if_&lt;Tag, Fun&gt; &gt;,
+    // ... apply the Fun transform.
+    Fun
+  &gt;
+{};</programlisting>
+          </para>
+          <para>
+ With <computeroutput>recurse_if_&lt;&gt;</computeroutput> as defined above, + <computeroutput>proto::fold_tree&lt;Sequence, State0, Fun&gt;()(expr, state, data)</computeroutput>
+            is equivalent to:
+            <programlisting><classname>proto::fold</classname>&lt;
+  Sequence,
+  State0,
+  recurse_if_&lt;typename Expr::proto_tag, Fun&gt;
+&gt;()(expr, state, data).</programlisting>
+ It has the effect of folding a tree front-to-back, recursing into child nodes that share a
+            tag type with the parent node.
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+            <type>
+ <classname>proto::fold</classname>&lt;Sequence, State0, recurse_if_&lt;typename Expr::proto_tag, Fun&gt; &gt;
+      ::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+      </struct>
+
+      <struct name="reverse_fold_tree">
+        <template>
+          <template-type-parameter name="Sequence"/>
+          <template-type-parameter name="State0"/>
+          <template-type-parameter name="Fun"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; reverse_fold_tree&lt;Sequence, State0, Fun&gt; &gt;</inherit> + <purpose>A <conceptname>PrimitiveTransform</conceptname> that recursively applies the + <computeroutput><classname>proto::reverse_fold&lt;&gt;</classname></computeroutput> transform to
+          sub-trees that all share a common tag type.</purpose>
+        <description>
+          <para>
+ <computeroutput>proto::reverse_fold_tree&lt;&gt;</computeroutput> is useful for flattening trees + into lists; for example, you might use <computeroutput>proto::reverse_fold_tree&lt;&gt;</computeroutput> + to flatten an expression tree like <computeroutput>a | b | c</computeroutput> into a Fusion list like
+            <computeroutput>cons(a, cons(b, cons(c)))</computeroutput>.
+          </para>
+          <para>
+ <computeroutput>proto::reverse_fold_tree&lt;&gt;</computeroutput> is easily understood in terms of + a <computeroutput>recurse_if_&lt;&gt;</computeroutput> helper, defined as follows:
+            <programlisting> template&lt;typename Tag, typename Fun&gt;
+struct recurse_if_ :
+  <classname>proto::if_</classname>&lt;
+    // If the current node has type type "Tag" ...
+ boost::is_same&lt;<classname>proto::tag_of</classname>&lt;<classname>proto::_</classname>&gt;, Tag&gt;(),
+    // ... recurse, otherwise ...
+ <classname>proto::reverse_fold</classname>&lt;<classname>proto::_</classname>, <classname>proto::_state</classname>, recurse_if_&lt;Tag, Fun&gt; &gt;,
+    // ... apply the Fun transform.
+    Fun
+  &gt;
+{};</programlisting>
+          </para>
+          <para>
+ With <computeroutput>recurse_if_&lt;&gt;</computeroutput> as defined above, + <computeroutput>proto::reverse_fold_tree&lt;Sequence, State0, Fun&gt;()(expr, state, data)</computeroutput>
+            is equivalent to:
+            <programlisting><classname>proto::reverse_fold</classname>&lt;
+  Sequence,
+  State0,
+  recurse_if_&lt;typename Expr::proto_tag, Fun&gt;
+&gt;()(expr, state, data).</programlisting>
+ It has the effect of folding a tree back-to-front, recursing into child nodes that share a
+            tag type with the parent node.
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <inherit>
+            <type>
+ <classname>proto::reverse_fold</classname>&lt;Sequence, State0, recurse_if_&lt;typename Expr::proto_tag, Fun&gt; &gt;
+      ::template impl&lt;Expr, State, Data&gt;</type>
+          </inherit>
+        </struct>
+      </struct>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/transform/impl.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/transform/impl.hpp">
+ <para>Contains definition of transform&lt;&gt; and transform_impl&lt;&gt; helpers. </para>
+  <namespace name="boost">
+    <namespace name="proto">
+
+      <!-- proto::transform -->
+      <struct name="transform">
+        <template>
+          <template-type-parameter name="PrimitiveTransform"/>
+        </template>
+ <purpose>Inherit from this to make your type a <conceptname>PrimitiveTransform</conceptname>.</purpose>
+        <struct-specialization name="result">
+          <template>
+            <template-type-parameter name="This"/>
+            <template-type-parameter name="Expr"/>
+          </template>
+          <specialization>
+            <template-arg>This(Expr)</template-arg>
+          </specialization>
+          <typedef name="type">
+ <type>typename PrimitiveTransform::template impl&lt; Expr, <replaceable>unspecified</replaceable>, <replaceable>unspecified</replaceable> &gt;::result_type</type>
+          </typedef>
+        </struct-specialization>
+        <struct-specialization name="result">
+          <template>
+            <template-type-parameter name="This"/>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+          </template>
+          <specialization>
+            <template-arg>This(Expr, State)</template-arg>
+          </specialization>
+          <typedef name="type">
+ <type>typename PrimitiveTransform::template impl&lt; Expr, State, <replaceable>unspecified</replaceable> &gt;::result_type</type>
+          </typedef>
+        </struct-specialization>
+        <struct-specialization name="result">
+          <template>
+            <template-type-parameter name="This"/>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+          <specialization>
+            <template-arg>This(Expr, State, Data)</template-arg>
+          </specialization>
+          <typedef name="type">
+ <type>typename PrimitiveTransform::template impl&lt; Expr, State, Data &gt;::result_type</type>
+          </typedef>
+        </struct-specialization>
+        <typedef name="transform_type">
+          <type>PrimitiveTransform</type>
+        </typedef>
+        <method-group name="public member functions">
+          <method name="operator()" cv="const">
+ <type>typename PrimitiveTransform::template impl&lt;Expr &amp;, <replaceable>unspecified</replaceable>, <replaceable>unspecified</replaceable>&gt;::result_type</type>
+            <template>
+              <template-type-parameter name="Expr"/>
+            </template>
+            <parameter name="expr">
+              <paramtype>Expr &amp;</paramtype>
+            </parameter>
+            <returns>
+              <computeroutput>
+ typename PrimitiveTransform::template impl&lt;Expr &amp;, <replaceable>unspecified</replaceable>, <replaceable>unspecified</replaceable>&gt;()(expr, <replaceable>unspecified</replaceable>, <replaceable>unspecified</replaceable>)
+              </computeroutput>
+            </returns>
+          </method>
+          <method name="operator()" cv="const">
+ <type>typename PrimitiveTransform::template impl&lt;Expr &amp;, State &amp;, <replaceable>unspecified</replaceable>&gt;::result_type</type>
+            <template>
+              <template-type-parameter name="Expr"/>
+              <template-type-parameter name="State"/>
+            </template>
+            <parameter name="expr">
+              <paramtype>Expr &amp;</paramtype>
+            </parameter>
+            <parameter name="state">
+              <paramtype>State &amp;</paramtype>
+            </parameter>
+            <returns>
+              <computeroutput>
+ typename PrimitiveTransform::template impl&lt;Expr &amp;, State &amp;, <replaceable>unspecified</replaceable>&gt;()(expr, state, <replaceable>unspecified</replaceable>)
+              </computeroutput>
+            </returns>
+          </method>
+          <method name="operator()" cv="const">
+ <type>typename PrimitiveTransform::template impl&lt;Expr &amp;, State const &amp;, <replaceable>unspecified</replaceable>&gt;::result_type</type>
+            <template>
+              <template-type-parameter name="Expr"/>
+              <template-type-parameter name="State"/>
+            </template>
+            <parameter name="expr">
+              <paramtype>Expr &amp;</paramtype>
+            </parameter>
+            <parameter name="state">
+              <paramtype>State const &amp;</paramtype>
+            </parameter>
+            <returns>
+              <computeroutput>
+ typename PrimitiveTransform::template impl&lt;Expr &amp;, State const &amp;, <replaceable>unspecified</replaceable>&gt;()(expr, state, <replaceable>unspecified</replaceable>)
+              </computeroutput>
+            </returns>
+          </method>
+          <method name="operator()" cv="const">
+ <type>typename PrimitiveTransform::template impl&lt;Expr &amp;, State &amp;, Data &amp;&gt;::result_type</type>
+            <template>
+              <template-type-parameter name="Expr"/>
+              <template-type-parameter name="State"/>
+              <template-type-parameter name="Data"/>
+            </template>
+            <parameter name="expr">
+              <paramtype>Expr &amp;</paramtype>
+            </parameter>
+            <parameter name="state">
+              <paramtype>State &amp;</paramtype>
+            </parameter>
+            <parameter name="data">
+              <paramtype>Data &amp;</paramtype>
+            </parameter>
+            <returns>
+              <computeroutput>
+ typename PrimitiveTransform::template impl&lt;Expr &amp;, State &amp;, Data &amp;&gt;()(expr, state, data)
+              </computeroutput>
+            </returns>
+          </method>
+          <method name="operator()" cv="const">
+ <type>typename PrimitiveTransform::template impl&lt;Expr &amp;, State const &amp;, Data &amp;&gt;::result_type</type>
+            <template>
+              <template-type-parameter name="Expr"/>
+              <template-type-parameter name="State"/>
+              <template-type-parameter name="Data"/>
+            </template>
+            <parameter name="expr">
+              <paramtype>Expr &amp;</paramtype>
+            </parameter>
+            <parameter name="state">
+              <paramtype>State const &amp;</paramtype>
+            </parameter>
+            <parameter name="data">
+              <paramtype>Data &amp;</paramtype>
+            </parameter>
+            <returns>
+              <computeroutput>
+ typename PrimitiveTransform::template impl&lt;Expr &amp;, State const &amp;, Data &amp;&gt;()(expr, state, data)
+              </computeroutput>
+            </returns>
+          </method>
+        </method-group>
+      </struct>
+
+      <!-- proto::transform_impl -->
+      <struct name="transform_impl">
+        <template>
+          <template-type-parameter name="Expr"/>
+          <template-type-parameter name="State"/>
+          <template-type-parameter name="Data"/>
+        </template>
+        <typedef name="expr">
+ <type>typename boost::remove_reference&lt;Expr const&gt;::type</type>
+        </typedef>
+        <typedef name="expr_param">
+ <type>typename boost::add_reference&lt;Expr const&gt;::type</type>
+        </typedef>
+        <typedef name="state">
+ <type>typename boost::remove_reference&lt;State const&gt;::type</type>
+        </typedef>
+        <typedef name="state_param">
+ <type>typename boost::add_reference&lt;State const&gt;::type</type>
+        </typedef>
+        <typedef name="data">
+ <type>typename boost::remove_reference&lt;Data const&gt;::type</type>
+        </typedef>
+        <typedef name="data_param">
+ <type>typename boost::add_reference&lt;Data const&gt;::type</type>
+        </typedef>
+      </struct>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/transform/lazy.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/transform/lazy.hpp">
+  <para>
+    Contains definition of the
+    <computeroutput>
+      <classname alt="boost::proto::lazy">proto::lazy&lt;&gt;</classname>
+    </computeroutput> transform.
+  </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <struct name="lazy">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; lazy&lt;T&gt; &gt;</inherit>
+        <purpose>A <conceptname>PrimitiveTransform</conceptname> that uses
+ <computeroutput><classname>proto::make&lt;&gt;</classname></computeroutput> to build a
+          <conceptname>CallableTransform</conceptname>, and then uses
+ <computeroutput><classname>proto::call&lt;&gt;</classname></computeroutput> to apply it.
+        </purpose>
+        <description>
+          <para>
+ <computeroutput>proto::lazy&lt;&gt;</computeroutput> is useful as a higher-order transform, + when the transform to be applied depends on the current state of the transformation. The
+            invocation of the <computeroutput>
+              <classname>proto::make&lt;&gt;</classname>
+ </computeroutput> transform evaluates any nested transforms, and the resulting type is treated + as a <conceptname>CallableTransform</conceptname>, which is evaluated with + <computeroutput><classname>proto::call&lt;&gt;</classname></computeroutput>.
+          </para>
+          <para>
+            For the full description of the behavior of the
+            <computeroutput>
+              <classname>proto::lazy&lt;&gt;</classname>
+            </computeroutput>
+            transform, see the documentation for the nested
+            <computeroutput>
+              <classname>proto::lazy::impl&lt;&gt;</classname>
+            </computeroutput>
+            class template.
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><type><classname>proto::transform_impl</classname>&lt;Expr, State, Data&gt;</type></inherit>
+          <typedef name="result_type">
+            <type><replaceable>see-below</replaceable></type>
+            <description>
+              <para>
+ <computeroutput><classname>proto::lazy</classname>&lt;T&gt;::impl&lt;Expr,State,Data&gt;::result_type</computeroutput>
+                is calculated as follows:
+                <itemizedlist>
+                  <listitem>
+                    <para>
+                      If <computeroutput>T</computeroutput> if of the form
+ <computeroutput>O(A<subscript>0</subscript>,...A<subscript>n</subscript>)</computeroutput>, then let <computeroutput>O'</computeroutput> + be <computeroutput>boost::result_of&lt;<classname>proto::make</classname>&lt;O&gt;(Expr, State, Data)&gt;::type</computeroutput> + and let <computeroutput>T'</computeroutput> be <computeroutput>O'(A<subscript>0</subscript>,...A<subscript>n</subscript>)</computeroutput>.
+                    </para>
+                  </listitem>
+                  <listitem>
+                    <para>
+                      Otherwise, let <computeroutput>T'</computeroutput>
+ be <computeroutput>boost::result_of&lt;<classname>proto::make</classname>&lt;T&gt;(Expr, State, Data)&gt;::type</computeroutput>.
+                    </para>
+                  </listitem>
+                </itemizedlist>
+                <para>
+                  The result type is
+                  <computeroutput>
+ boost::result_of&lt;<classname>proto::call</classname>&lt;T'&gt;(Expr, State, Data)&gt;::type
+                  </computeroutput>.
+                </para>
+              </para>
+            </description>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>result_type</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+              </parameter>
+              <parameter name="state">
+                <paramtype>typename impl::state_param</paramtype>
+              </parameter>
+              <parameter name="data">
+                <paramtype>typename impl::data_param</paramtype>
+              </parameter>
+              <description>
+                <para>
+ <computeroutput><classname>proto::lazy</classname>&lt;T&gt;::impl&lt;Expr,State,Data&gt;::operator()</computeroutput> behaves as follows:
+                  <itemizedlist>
+                    <listitem>
+                      <para>
+ If <computeroutput>T</computeroutput> if of the form + <computeroutput>O(A<subscript>0</subscript>,...A<subscript>n</subscript>)</computeroutput>, then let <computeroutput>O'</computeroutput> + be <computeroutput>boost::result_of&lt;<classname>proto::make</classname>&lt;O&gt;(Expr, State, Data)&gt;::type</computeroutput> + and let <computeroutput>T'</computeroutput> be <computeroutput>O'(A<subscript>0</subscript>,...A<subscript>n</subscript>)</computeroutput>.
+                      </para>
+                    </listitem>
+                    <listitem>
+                      <para>
+                        Otherwise, let <computeroutput>T'</computeroutput>
+ be <computeroutput>boost::result_of&lt;<classname>proto::make</classname>&lt;T&gt;(Expr, State, Data)&gt;::type</computeroutput>.
+                      </para>
+                    </listitem>
+                  </itemizedlist>
+                </para>
+              </description>
+              <returns>
+                <para>
+                  <computeroutput>
+ <classname>proto::call</classname>&lt;T'&gt;()(expr, state, data)
+                  </computeroutput>
+                </para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+      </struct>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/transform/make.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,347 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/transform/make.hpp">
+  <para>
+    Contains definition of the
+    <computeroutput>
+      <classname alt="boost::proto::make">proto::make&lt;&gt;</classname>
+    </computeroutput>
+    and
+    <computeroutput>
+ <classname alt="boost::proto::protect">proto::protect&lt;&gt;</classname>
+    </computeroutput>
+    transforms.
+  </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <struct name="noinvoke">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+ <purpose>A type annotation in an <conceptname>ObjectTransform</conceptname> which instructs + Proto not to look for a nested <computeroutput>::type</computeroutput> within + <computeroutput>T</computeroutput> after type substitution.</purpose>
+        <description>
+          <para>
+            <conceptname>ObjectTransform</conceptname>s are evaluated by
+ <computeroutput><classname alt="proto::make">proto::make&lt;&gt;</classname></computeroutput>, + which finds all nested transforms and replaces them with the result of their applications. + If any substitutions are performed, the result is first assumed to be a metafunction to be applied; + that is, Proto checks to see if the result has a nested <computeroutput>::type</computeroutput> + typedef. If it does, that becomes the result. The purpose of <computeroutput>proto::noinvoke&lt;&gt;</computeroutput> + is to prevent Proto from looking for a nested <computeroutput>::type</computeroutput> typedef
+            in these situations.
+          </para>
+          <para>
+            Example:
+            <programlisting>struct Test
+  : <classname>proto::when</classname>&lt;
+        <classname>_</classname>
+      , proto::noinvoke&lt;
+            // This remove_pointer invocation is bloked by noinvoke
+            boost::remove_pointer&lt;
+                // This add_pointer invocation is *not* blocked by noinvoke
+                boost::add_pointer&lt;<classname>_</classname>&gt;
+            &gt;
+        &gt;()
+    &gt;
+{};
+
+void test_noinvoke()
+{
+    typedef <classname>proto::terminal</classname>&lt;int&gt;::type Int;
+
+    BOOST_MPL_ASSERT((
+        boost::is_same&lt;
+            boost::result_of&lt;Test(Int)&gt;::type
+          , boost::remove_pointer&lt;Int *&gt;
+        &gt;
+    ));
+
+    Int i = {42};
+    boost::remove_pointer&lt;Int *&gt; t = Test()(i);
+}</programlisting>
+          </para>
+        </description>
+      </struct>
+      <struct name="protect">
+        <template>
+          <template-type-parameter name="PrimitiveTransform"/>
+        </template>
+ <inherit><classname>proto::transform</classname>&lt; protect&lt;PrimitiveTransform&gt; &gt;</inherit> + <purpose>A <conceptname>PrimitiveTransform</conceptname> which prevents another + <conceptname>PrimitiveTransform</conceptname> from being applied in an
+          <conceptname>ObjectTransform</conceptname>.</purpose>
+        <description>
+          <para>
+            When building higher order transforms with
+            <computeroutput>
+              <classname alt="proto::make">proto::make&lt;&gt;</classname>
+            </computeroutput> or
+            <computeroutput>
+              <classname alt="proto::lazy">proto::lazy&lt;&gt;</classname>
+            </computeroutput>,
+ you sometimes would like to build types that are parameterized with Proto transforms. In such + lambda-style transforms, Proto will unhelpfully find all nested transforms and apply them, even + if you don't want them to be applied. Consider the following transform, which will replace the
+            <computeroutput>proto::_</computeroutput> in
+            <computeroutput>Bar&lt;proto::_&gt;()</computeroutput>
+ with <computeroutput>proto::terminal&lt;int&gt;::type</computeroutput>:
+          </para>
+          <para>
+            <programlisting>template&lt;typename T&gt;
+struct Bar
+{};
+
+struct Foo :
+ <classname>proto::when</classname>&lt;<classname>proto::_</classname>, Bar&lt;<classname>proto::_</classname>&gt;() &gt;
+{};
+
+<classname>proto::terminal</classname>&lt;int&gt;::type i = {0};
+
+int main() {
+  Foo()(i);
+  std::cout &lt;&lt; typeid(Foo()(i)).name() &lt;&lt; std::endl;
+}</programlisting>
+          </para>
+          <para>
+            If you actually wanted to default-construct an object of type
+ <computeroutput>Bar&lt;proto::_&gt;</computeroutput>, you would have to protect the + <computeroutput>_</computeroutput> to prevent it from being applied. You can + use <computeroutput>proto::protect&lt;&gt;</computeroutput> as follows:
+          </para>
+          <para>
+            <programlisting>// OK: replace anything with Bar&lt;_&gt;()
+struct Foo :
+ <classname>proto::when</classname>&lt;<classname>proto::_</classname>, Bar&lt;<classname>proto::protect</classname>&lt;<classname>proto::_</classname>&gt; &gt;() &gt;
+{};</programlisting>
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name=""/>
+            <template-type-parameter name=""/>
+            <template-type-parameter name=""/>
+          </template>
+          <typedef name="result_type">
+            <type>PrimitiveTransform</type>
+          </typedef>
+        </struct>
+      </struct>
+
+      <struct name="make">
+        <template>
+          <template-type-parameter name="T"/>
+        </template>
+
+ <inherit><classname>proto::transform</classname>&lt; make&lt;T&gt; &gt;</inherit>
+
+ <purpose>A <conceptname>PrimitiveTransform</conceptname> that computes a type by evaluating + any nested transforms and then constructs an object of that type. </purpose>
+
+        <description>
+          <para>
+ The purpose of <computeroutput>proto::make&lt;&gt;</computeroutput> is to annotate a transform as
+            an <conceptname>ObjectTransform</conceptname> so that
+            <computeroutput>
+              <classname alt="proto::when">proto::when&lt;&gt;</classname>
+            </computeroutput> knows
+            how to apply it.
+          </para>
+
+          <para>
+            For the full description of the behavior of the
+ <computeroutput><classname alt="proto::make">proto::make&lt;&gt;</classname></computeroutput>
+            transform, see the documentation for the nested
+ <computeroutput><classname alt="proto::make::impl">proto::make::impl&lt;&gt;</classname></computeroutput>
+            class template.
+          </para>
+        </description>
+
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
+          <typedef name="result_type">
+            <type><emphasis>see-below</emphasis></type>
+            <description>
+              <para>
+ <computeroutput><classname>proto::make</classname>&lt;T&gt;::impl&lt;Expr, State, Data&gt;::result_type</computeroutput> is
+                computed as follows:
+              </para>
+              <para>
+ If <computeroutput>T</computeroutput> is an <conceptname>ObjectTransform</conceptname> of the form + <computeroutput>Object(A<subscript>0</subscript>,...A<subscript>n</subscript>)</computeroutput>, + then let <computeroutput>O</computeroutput> be the return type + <computeroutput>Object</computeroutput>. Otherwise, let <computeroutput>O</computeroutput> + be <computeroutput>T</computeroutput>. The <computeroutput>result_type</computeroutput> typedef is
+                then computed as follows:
+              </para>
+              <para>
+                <itemizedlist>
+                  <listitem>
+                    <para>
+ If <computeroutput>O</computeroutput> is a <conceptname>Transform</conceptname>, then let
+                      the result type be
+                      <computeroutput>
+ boost::result_of&lt;<classname>proto::when</classname>&lt;<classname>_</classname>, O&gt;(Expr, State, Data)&gt;::type
+                      </computeroutput>.
+                      Note that a substitution took place.
+                    </para>
+                  </listitem>
+                  <listitem>
+ If <computeroutput>O</computeroutput> is a template like + <computeroutput><classname>proto::noinvoke</classname>&lt;S&lt;X<subscript>0</subscript>,...X<subscript>n</subscript>&gt; &gt;</computeroutput>,
+                    then the result type is calculated as follows:
+                    <itemizedlist>
+                      <listitem>
+                        <para>
+                          For each <computeroutput>i</computeroutput> in
+ <computeroutput>[0,n]</computeroutput>, let <computeroutput>
+                            X<subscript>i</subscript>'
+                          </computeroutput> be
+                          <computeroutput>
+ boost::result_of&lt;<classname>proto::make</classname>&lt;X<subscript>i</subscript>&gt;(Expr, State, Data)&gt;::type
+                          </computeroutput>
+ (which evaluates this procedure recursively). Note that a substitution took place. (In this case, + Proto merely assumes that a substitution took place for the sake of compile-time efficiency. There + would be no reason to use <computeroutput><classname>proto::noinvoke&lt;&gt;</classname></computeroutput>
+                          otherwise.)
+                        </para>
+                      </listitem>
+                      <listitem>
+                        <para>
+                          The result type is
+                          <computeroutput>
+ S&lt;X<subscript>0</subscript>',...X<subscript>n</subscript>'&gt;
+                          </computeroutput>.
+                        </para>
+                      </listitem>
+                    </itemizedlist>
+                  </listitem>
+                  <listitem>
+ If <computeroutput>O</computeroutput> is a template like + <computeroutput>S&lt;X<subscript>0</subscript>,...X<subscript>n</subscript>&gt;</computeroutput>,
+                    then the result type is calculated as follows:
+                    <itemizedlist>
+                      <listitem>
+                        <para>
+                          For each <computeroutput>i</computeroutput> in
+ <computeroutput>[0,n]</computeroutput>, let <computeroutput>
+                            X<subscript>i</subscript>'
+                          </computeroutput> be
+                          <computeroutput>
+ boost::result_of&lt;<classname>proto::make</classname>&lt;X<subscript>i</subscript>&gt;(Expr, State, Data)&gt;::type
+                          </computeroutput>
+ (which evaluates this procedure recursively). Note whether any substitutions took place during
+                          this operation.
+                        </para>
+                      </listitem>
+                      <listitem>
+                        <para>
+ If any substitutions took place in the above step and
+                          <computeroutput>
+ S&lt;X<subscript>0</subscript>',...X<subscript>n</subscript>'&gt;
+                          </computeroutput> has a nested
+ <computeroutput>type</computeroutput> typedef, the result type is
+                          <computeroutput>
+ S&lt;X<subscript>0</subscript>',...X<subscript>n</subscript>'&gt;::type
+                          </computeroutput>.
+                        </para>
+                      </listitem>
+                      <listitem>
+                        <para>
+                          Otherwise, the result type is
+                          <computeroutput>
+ S&lt;X<subscript>0</subscript>',...X<subscript>n</subscript>'&gt;
+                          </computeroutput>.
+                        </para>
+                      </listitem>
+                    </itemizedlist>
+                  </listitem>
+                  <listitem>
+ Otherwise, the result type is <computeroutput>O</computeroutput>, and note that no
+                    substitution took place.
+                  </listitem>
+                </itemizedlist>
+              </para>
+              <para>
+ Note that <computeroutput><classname alt="proto::when">proto::when&lt;&gt;</classname></computeroutput> is implemented + in terms of <computeroutput><classname alt="proto::call">proto::call&lt;&gt;</classname></computeroutput> + and <computeroutput><classname alt="proto::make">proto::make&lt;&gt;</classname></computeroutput>, so the
+                above procedure is evaluated recursively.
+              </para>
+            </description>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>result_type</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+              </parameter>
+              <parameter name="state">
+                <paramtype>typename impl::state_param</paramtype>
+              </parameter>
+              <parameter name="data">
+                <paramtype>typename impl::data_param</paramtype>
+              </parameter>
+              <description>
+                <para>
+                  <computeroutput>
+ <classname>proto::make</classname>&lt;T&gt;::impl&lt;Expr,State,Data&gt;::operator()
+                  </computeroutput>
+                  behaves as follows:
+                </para>
+                <para>
+                  <itemizedlist>
+                    <listitem>
+                      <para>
+ If <computeroutput>T</computeroutput> is of the form + <computeroutput>O(A<subscript>0</subscript>,...A<subscript>n</subscript>)</computeroutput>, then:
+                      </para>
+                      <itemizedlist>
+                        <listitem>
+                          <para>
+                            If <computeroutput>
+ <classname>proto::is_aggregate</classname>&lt;result_type&gt;::value + </computeroutput> is <computeroutput>true</computeroutput>, then construct + and return an object <computeroutput>that</computeroutput> as follows:
+                            <programlisting>result_type that = {
+ <classname>proto::when</classname>&lt;<classname>_</classname>, A<subscript>0</subscript>&gt;()(expr, state, data),
+  ...
+ <classname>proto::when</classname>&lt;<classname>_</classname>, A<subscript>n</subscript>&gt;()(expr, state, data)
+};</programlisting>
+                          </para>
+                        </listitem>
+                        <listitem>
+                          <para>
+                            Otherwise, construct
+ and return an object <computeroutput>that</computeroutput> as follows:
+                            <programlisting>result_type that(
+ <classname>proto::when</classname>&lt;<classname>_</classname>, A<subscript>0</subscript>&gt;()(expr, state, data),
+  ...
+ <classname>proto::when</classname>&lt;<classname>_</classname>, A<subscript>n</subscript>&gt;()(expr, state, data)
+);</programlisting>
+                          </para>
+                        </listitem>
+                      </itemizedlist>
+                    </listitem>
+                    <listitem>
+                      <para>
+                        Otherwise, construct
+ and return an object <computeroutput>that</computeroutput> as follows: + <programlisting>result_type that = result_type();</programlisting>
+                      </para>
+                    </listitem>
+                  </itemizedlist>
+                </para>
+              </description>
+            </method>
+          </method-group>
+        </struct>
+      </struct>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/transform/pass_through.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/transform/pass_through.hpp">
+  <para>Definition of the
+ <computeroutput><classname alt="boost::proto::pass_through">proto::pass_through&lt;&gt;</classname></computeroutput> + transform, which is the default transform of all of the expression generator metafunctions such as + <computeroutput><classname alt="boost::proto::unary_plus">proto::unary_plus&lt;&gt;</classname></computeroutput>, + <computeroutput><classname alt="boost::proto::plus">proto::plus&lt;&gt;</classname></computeroutput> and + <computeroutput><classname alt="boost::proto::nary_expr">proto::nary_expr&lt;&gt;</classname></computeroutput>.</para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <struct name="pass_through">
+        <template>
+          <template-type-parameter name="Grammar"/>
+        </template>
+ <inherit><type><classname>proto::transform</classname>&lt; pass_through&lt;Grammar&gt; &gt;</type></inherit> + <purpose>A <conceptname>PrimitiveTransform</conceptname> that transforms the child expressions of an expression + node according to the corresponding children of a Grammar.</purpose>
+        <description>
+          <para>
+ Given a Grammar such as <computeroutput><classname>proto::plus</classname>&lt;T0, T1&gt;</computeroutput>,
+            an expression type that matches the grammar such as
+ <computeroutput><classname>proto::plus</classname>&lt;E0, E1&gt;::type</computeroutput>, a state + <computeroutput>S</computeroutput> and a data <computeroutput>D</computeroutput>, the result of applying + the <computeroutput>proto::pass_through&lt;<classname>proto::plus</classname>&lt;T0, T1&gt; &gt;</computeroutput> + transform is: <programlisting><classname>proto::plus</classname>&lt;
+  boost::result_of&lt;T0(E0, S, D)&gt;::type,
+  boost::result_of&lt;T1(E1, S, D)&gt;::type
+&gt;::type</programlisting>
+          </para>
+          <para>
+ The above demonstrates how child transforms and child expressions are applied pairwise, and how the + results are reassembled into a new expression node with the same tag type as the original.
+          </para>
+          <para>
+ The explicit use of <computeroutput>proto::pass_through&lt;&gt;</computeroutput> is not usually
+            needed, since the expression generator metafunctions such as
+ <computeroutput><classname>proto::plus</classname>&lt;&gt;</computeroutput> have + <computeroutput>proto::pass_through&lt;&gt;</computeroutput> as their default transform. So,
+            for instance, these are equivalent:
+            <itemizedlist>
+              <listitem>
+                <computeroutput>
+ <classname>proto::when</classname>&lt; <classname>proto::plus</classname>&lt;X, Y&gt;, proto::pass_through&lt; <classname>proto::plus</classname>&lt;X, Y&gt; &gt; &gt;
+                </computeroutput>
+              </listitem>
+              <listitem>
+                <computeroutput>
+ <classname>proto::when</classname>&lt; <classname>proto::plus</classname>&lt;X, Y&gt;, <classname>proto::plus</classname>&lt;X, Y&gt; &gt;
+                </computeroutput>
+              </listitem>
+              <listitem>
+                <computeroutput>
+ <classname>proto::when</classname>&lt; <classname>proto::plus</classname>&lt;X, Y&gt; &gt; // because of proto::when&lt;class X, class Y=X&gt;
+                </computeroutput>
+              </listitem>
+              <listitem>
+                <computeroutput>
+ <classname>proto::plus</classname>&lt;X, Y&gt; // because plus&lt;&gt; is both a grammar and a transform
+                </computeroutput>
+              </listitem>
+            </itemizedlist>
+          </para>
+          <para>
+            For example, consider the following transform that promotes all
+ <computeroutput>float</computeroutput> terminals in an expression to
+            <computeroutput>double</computeroutput>.
+ <programlisting>// This transform finds all float terminals in an expression and promotes
+// them to doubles.
+struct Promote :
+  <classname>proto::or_</classname>&lt;
+ <classname>proto::when</classname>&lt;<classname>proto::terminal</classname>&lt;float&gt;, <classname>proto::terminal</classname>&lt;double&gt;::type(<classname>proto::_value</classname>) &gt;,
+    // terminal&lt;&gt;'s default transform is a no-op:
+ <classname>proto::terminal</classname>&lt;<classname>proto::_</classname>&gt;,
+    // nary_expr&lt;&gt; has a pass_through&lt;&gt; transform:
+ <classname>proto::nary_expr</classname>&lt;<classname>proto::_</classname>, <classname>proto::vararg</classname>&lt;Promote&gt; &gt;
+  &gt;
+{};</programlisting>
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><type><classname>proto::transform_impl</classname>&lt;Expr, State, Data&gt;</type></inherit>
+          <typedef name="GN">
+ <purpose>For each N in [0,Expr arity), for exposition only</purpose> + <type>typename proto::result_of::child_c&lt;Grammar, N&gt;::type</type>
+          </typedef>
+          <typedef name="EN">
+ <purpose>For each N in [0,Expr arity), for exposition only</purpose> + <type>typename proto::result_of::child_c&lt;Expr, N&gt;::type</type>
+          </typedef>
+          <typedef name="RN">
+ <purpose>For each N in [0,Expr arity), for exposition only</purpose> + <type>typename boost::result_of&lt;GN(EN,State,Data)&gt;::type</type>
+          </typedef>
+          <typedef name="T">
+            <purpose>For exposition only</purpose>
+            <type>typename Expr::proto_tag</type>
+          </typedef>
+          <typedef name="result_type">
+ <type><classname>proto::expr</classname>&lt;T, <classname>proto::listN</classname>&lt;R0,...RN&gt; &gt;</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>result_type</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+              </parameter>
+              <parameter name="state">
+                <paramtype>typename impl::state_param</paramtype>
+              </parameter>
+              <parameter name="data">
+                <paramtype>typename impl::data_param</paramtype>
+              </parameter>
+              <requires>
+                <para>
+                  <computeroutput>
+ <classname>proto::matches</classname>&lt;Expr, Grammar&gt;::value + </computeroutput> is <computeroutput>true</computeroutput>.
+                </para>
+              </requires>
+              <returns>
+                <para>
+                  <programlisting>result_type::make(
+ G0()(<functionname>proto::child_c</functionname>&lt;0&gt;(expr), state, data),
+  ...
+ GN()(<functionname>proto::child_c</functionname>&lt;N&gt;(expr), state, data)
+)</programlisting>
+                </para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+      </struct>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference/transform/when.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="utf-8"?>
+<header name="boost/proto/transform/when.hpp">
+  <para>
+    Definition of the
+    <computeroutput>
+      <classname alt="boost::proto::when">proto::when&lt;&gt;</classname>
+    </computeroutput> and
+    <computeroutput>
+ <classname alt="boost::proto::otherwise">proto::otherwise&lt;&gt;</classname>
+    </computeroutput> transforms.
+  </para>
+  <namespace name="boost">
+    <namespace name="proto">
+      <struct name="when">
+        <template>
+          <template-type-parameter name="Grammar"/>
+          <template-type-parameter name="PrimitiveTransform">
+            <default>Grammar</default>
+          </template-type-parameter>
+        </template>
+ <purpose>A grammar element and a <conceptname>PrimitiveTransform</conceptname> that associates
+          a transform with the grammar.</purpose>
+        <description>
+          <para>
+ Use <computeroutput>proto::when&lt;&gt;</computeroutput> to override a grammar's default + transform with a custom transform. It is for used when composing larger transforms by + associating smaller transforms with individual rules in your grammar, as in the following + transform which counts the number of terminals in an expression.
+            <programlisting>// Count the terminals in an expression tree.
+// Must be invoked with initial state == mpl::int_&lt;0&gt;().
+struct CountLeaves :
+  <classname>proto::or_</classname>&lt;
+ proto::when&lt;<classname>proto::terminal</classname>&lt;<classname>proto::_</classname>&gt;, mpl::next&lt;<classname>proto::_state</classname>&gt;()&gt;, + proto::otherwise&lt;<classname>proto::fold</classname>&lt;<classname>proto::_</classname>, <classname>proto::_state</classname>, CountLeaves&gt; &gt;
+  &gt;
+{};</programlisting>
+          </para>
+          <para>
+ In <computeroutput>proto::when&lt;G, T&gt;</computeroutput>, when <computeroutput>T</computeroutput> + is a class type it is a <conceptname>PrimitiveTransform</conceptname> and the following equivalencies hold:
+          </para>
+          <itemizedlist>
+            <listitem>
+              <para>
+ <computeroutput>boost::result_of&lt;proto::when&lt;G,T&gt;(E,S,V)&gt;::type</computeroutput> is the same as + <computeroutput>boost::result_of&lt;T(E,S,V)&gt;::type</computeroutput>.
+              </para>
+            </listitem>
+            <listitem>
+              <para>
+ <computeroutput>proto::when&lt;G,T&gt;()(e,s,v)</computeroutput> is the same as
+                <computeroutput>T()(e,s,v)</computeroutput>.
+              </para>
+            </listitem>
+          </itemizedlist>
+        </description>
+        <inherit><type>PrimitiveTransform</type></inherit>
+        <typedef name="proto_base_expr">
+          <type>typename Grammar::proto_base_expr</type>
+        </typedef>
+      </struct>
+
+      <struct-specialization name="when">
+        <template>
+          <template-type-parameter name="Grammar"/>
+          <template-type-parameter name="Fun"/>
+        </template>
+        <specialization>
+          <template-arg>Grammar</template-arg>
+          <template-arg>Fun *</template-arg>
+        </specialization>
+ <inherit><classname>proto::when</classname>&lt; Grammar, Fun &gt;</inherit> + <purpose>A specialization that treats function pointer <conceptname>Transform</conceptname>s as if they + were function type <conceptname>Transform</conceptname>s.</purpose>
+        <description>
+          <para>
+ This specialization requires that <computeroutput>Fun</computeroutput> is actually a function type.
+          </para>
+          <para>
+            This specialization is required for nested transforms such as
+ <computeroutput>proto::when&lt;G, T0(T1(_))&gt;</computeroutput>. In C++, functions that are used + as parameters to other functions automatically decay to funtion pointer types. In other words, the + type <computeroutput>T0(T1(_))</computeroutput> is indistinguishable from + <computeroutput>T0(T1(*)(_))</computeroutput>. This specialization is required to handle these
+            nested function pointer type transforms properly.
+          </para>
+        </description>
+      </struct-specialization>
+
+      <struct-specialization name="when">
+        <template>
+          <template-type-parameter name="Grammar"/>
+          <template-type-parameter name="R"/>
+          <template-type-parameter name="A" pack="1"/>
+        </template>
+        <specialization>
+          <template-arg>Grammar</template-arg>
+          <template-arg>R(A...)</template-arg>
+        </specialization>
+ <inherit><classname>proto::transform</classname>&lt; when&lt;Grammar, R(A...)&gt; &gt;</inherit> + <purpose>A grammar element and a <conceptname>PrimitiveTransform</conceptname> that associates a
+          transform with the grammar. </purpose>
+        <description>
+          <para>
+ Use <computeroutput>proto::when&lt;&gt;</computeroutput> to override a grammar's default + transform with a custom transform. It is for use when composing larger transforms by associating
+            smaller transforms with individual rules in your grammar.
+          </para>
+          <para>
+ The <computeroutput>when&lt;G, R(A...)&gt;</computeroutput> form accepts either a + <conceptname>CallableTransform</conceptname> or an <conceptname>ObjectTransform</conceptname> as its + second parameter. <computeroutput>proto::when&lt;&gt;</computeroutput> uses + <computeroutput><classname>proto::is_callable</classname>&lt;R&gt;::value</computeroutput> to
+            distinguish between the two, and uses
+ <computeroutput><classname>proto::call&lt;&gt;</classname></computeroutput> to evaluate
+            <conceptname>CallableTransform</conceptname>s and
+ <computeroutput><classname>proto::make&lt;&gt;</classname></computeroutput> to evaluate
+            <conceptname>ObjectTransform</conceptname>s.
+          </para>
+        </description>
+        <struct name="impl">
+          <template>
+            <template-type-parameter name="Expr"/>
+            <template-type-parameter name="State"/>
+            <template-type-parameter name="Data"/>
+          </template>
+ <inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
+          <typedef name="call_">
+            <purpose>For exposition only</purpose>
+            <type><classname>proto::call</classname>&lt;R(A...)&gt;</type>
+          </typedef>
+          <typedef name="make_">
+            <purpose>For exposition only</purpose>
+            <type><classname>proto::make</classname>&lt;R(A...)&gt;</type>
+          </typedef>
+          <typedef name="which">
+            <purpose>For exposition only</purpose>
+ <type>typename mpl::if_&lt;<classname>proto::is_callable</classname>&lt;R&gt;,call_,make_&gt;::type</type>
+          </typedef>
+          <typedef name="result_type">
+ <type>typename boost::result_of&lt;which(Expr, State, Data)&gt;::type</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>result_type</type>
+              <parameter name="expr">
+                <paramtype>typename impl::expr_param</paramtype>
+                <description>
+                  <para>The current expression </para>
+                </description>
+              </parameter>
+              <parameter name="state">
+                <paramtype>typename impl::state_param</paramtype>
+                <description>
+                  <para>The current state </para>
+                </description>
+              </parameter>
+              <parameter name="data">
+                <paramtype>typename impl::data_param</paramtype>
+                <description>
+                  <para>An arbitrary data </para>
+                </description>
+              </parameter>
+              <description>
+                <para>
+ Evaluate <computeroutput>R(A...)</computeroutput> as a transform either with + <computeroutput><classname>proto::call&lt;&gt;</classname></computeroutput> or with + <computeroutput><classname>proto::make&lt;&gt;</classname></computeroutput> depending + on whether <computeroutput><classname>proto::is_callable</classname>&lt;R&gt;::value</computeroutput> + is <computeroutput>true</computeroutput> or <computeroutput>false</computeroutput>.
+                </para>
+              </description>
+              <requires>
+                <para>
+ <computeroutput><classname>proto::matches</classname>&lt;Expr, Grammar&gt;::value</computeroutput>
+                  is <computeroutput>true</computeroutput>.
+                </para>
+              </requires>
+              <returns>
+                <para>
+ <computeroutput>which()(expr, state, data)</computeroutput>
+                </para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+        <typedef name="proto_base_expr">
+          <type>typename Grammar::proto_base_expr</type>
+        </typedef>
+      </struct-specialization>
+
+      <struct name="otherwise">
+        <template>
+          <template-type-parameter name="Fun"/>
+        </template>
+ <inherit><classname>proto::when</classname>&lt; <classname>proto::_</classname>, Fun &gt;</inherit>
+        <purpose>
+ Syntactic sugar for <computeroutput><classname>proto::when</classname>&lt; <classname>proto::_</classname>, Fun &gt;</computeroutput>,
+          for use in grammars to handle all the cases not yet handled.
+        </purpose>
+        <description>
+          <para>
+ Use <computeroutput>proto::otherwise&lt;T&gt;</computeroutput> in your grammars as a synonym for + <computeroutput><classname>proto::when</classname>&lt; <classname>proto::_</classname>, Fun &gt;</computeroutput> + as in the following transform which counts the number of terminals in an expression.
+          </para>
+          <para>
+            <programlisting>// Count the terminals in an expression tree.
+// Must be invoked with initial state == mpl::int_&lt;0&gt;().
+struct CountLeaves :
+  <classname>proto::or_</classname>&lt;
+ proto::when&lt;<classname>proto::terminal</classname>&lt;<classname>proto::_</classname>&gt;, mpl::next&lt;<classname>proto::_state</classname>&gt;()&gt;, + proto::otherwise&lt;<classname>proto::fold</classname>&lt;<classname>proto::_</classname>, <classname>proto::_state</classname>, CountLeaves&gt; &gt;
+  &gt;
+{};</programlisting>
+          </para>
+        </description>
+      </struct>
+    </namespace>
+  </namespace>
+</header>
=======================================
--- /dev/null
+++ /trunk/libs/proto/doc/reference.xml Mon Nov 30 05:58:26 2009
@@ -0,0 +1,1050 @@
+<?xml version="1.0" encoding="utf-8"?>
+<library-reference xmlns:xi="http://www.w3.org/2001/XInclude";>
+
+  <!-- classes -->
+  <section id="proto.reference.classes">
+    <title>Classes</title>
+    <itemizedlist>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::_">proto::_</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::_byref">proto::_byref</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::_byval">proto::_byval</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::_child_c">proto::_child_c</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::_data">proto::_data</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::_default">proto::_default</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::_expr">proto::_expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::_state">proto::_state</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::_value">proto::_value</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::address_of">proto::address_of</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::and_">proto::and_</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::arity_of">proto::arity_of</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::assign">proto::assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::binary_expr">proto::binary_expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::bitwise_and">proto::bitwise_and</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::bitwise_and_assign">proto::bitwise_and_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::bitwise_or">proto::bitwise_or</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::bitwise_or_assign">proto::bitwise_or_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::bitwise_xor">proto::bitwise_xor</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::bitwise_xor_assign">proto::bitwise_xor_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::by_value_generator">proto::by_value_generator</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::call">proto::call</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::callable">proto::callable</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::comma">proto::comma</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::complement">proto::complement</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::compose_generators">proto::compose_generators</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::context::callable_context">proto::context::callable_context</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::context::callable_eval">proto::context::callable_eval</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::context::default_context">proto::context::default_context</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::context::default_eval">proto::context::default_eval</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::context::null_context">proto::context::null_context</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::context::null_eval">proto::context::null_eval</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::convertible_to">proto::convertible_to</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::deduce_domain">proto::deduce_domain</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::default_domain">proto::default_domain</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::default_generator">proto::default_generator</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::dereference">proto::dereference</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::divides">proto::divides</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::divides_assign">proto::divides_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::domain">proto::domain</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::domain_of">proto::domain_of</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::equal_to">proto::equal_to</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::exact">proto::exact</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::expr">proto::expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::extends">proto::extends</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::fold">proto::fold</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::fold_tree">proto::fold_tree</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::function">proto::function</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::as_child">proto::functional::as_child</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::as_expr">proto::functional::as_expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::child">proto::functional::child</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::child_c">proto::functional::child_c</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::deep_copy">proto::functional::deep_copy</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::display_expr">proto::functional::display_expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::eval">proto::functional::eval</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::flatten">proto::functional::flatten</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::left">proto::functional::left</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::make_expr">proto::functional::make_expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::pop_front">proto::functional::pop_front</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::reverse">proto::functional::reverse</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::right">proto::functional::right</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::unpack_expr">proto::functional::unpack_expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::functional::value">proto::functional::value</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::generator">proto::generator</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::greater">proto::greater</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::greater_equal">proto::greater_equal</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::if_">proto::if_</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::if_else_">proto::if_else_</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::is_aggregate">proto::is_aggregate</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::is_callable">proto::is_callable</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::is_domain">proto::is_domain</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::is_expr">proto::is_expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::is_extension">proto::is_extension</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::is_proto_expr">proto::is_proto_expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::lazy">proto::lazy</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::less">proto::less</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::less_equal">proto::less_equal</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::listN">proto::list1&lt;&gt;, proto::list2&lt;&gt;, ...</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::literal">proto::literal</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::logical_and">proto::logical_and</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::logical_not">proto::logical_not</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::logical_or">proto::logical_or</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::make">proto::make</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::matches">proto::matches</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::mem_ptr">proto::mem_ptr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::minus">proto::minus</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::minus_assign">proto::minus_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::modulus">proto::modulus</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::modulus_assign">proto::modulus_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::multiplies">proto::multiplies</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::multiplies_assign">proto::multiplies_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::nary_expr">proto::nary_expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::negate">proto::negate</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::noinvoke">proto::noinvoke</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::not_">proto::not_</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::not_equal_to">proto::not_equal_to</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::nullary_expr">proto::nullary_expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::or_">proto::or_</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::otherwise">proto::otherwise</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::pass_through">proto::pass_through</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::plus">proto::plus</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::plus_assign">proto::plus_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::pod_generator">proto::pod_generator</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::post_dec">proto::post_dec</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::post_inc">proto::post_inc</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::pre_dec">proto::pre_dec</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::pre_inc">proto::pre_inc</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::protect">proto::protect</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::result_of::as_child">proto::result_of::as_child</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::result_of::as_expr">proto::result_of::as_expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::result_of::child">proto::result_of::child</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::result_of::child_c">proto::result_of::child_c</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::result_of::deep_copy">proto::result_of::deep_copy</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::result_of::eval">proto::result_of::eval</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::result_of::flatten">proto::result_of::flatten</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::result_of::left">proto::result_of::left</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::result_of::make_expr">proto::result_of::make_expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::result_of::right">proto::result_of::right</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::result_of::unpack_expr">proto::result_of::unpack_expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::result_of::value">proto::result_of::value</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::reverse_fold">proto::reverse_fold</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::reverse_fold_tree">proto::reverse_fold_tree</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::shift_left">proto::shift_left</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::shift_left_assign">proto::shift_left_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::shift_right">proto::shift_right</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::shift_right_assign">proto::shift_right_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::subscript">proto::subscript</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::switch_">proto::switch_</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::address_of">proto::tag::address_of</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::assign">proto::tag::assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::bitwise_and">proto::tag::bitwise_and</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::bitwise_and_assign">proto::tag::bitwise_and_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::bitwise_or">proto::tag::bitwise_or</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::bitwise_or_assign">proto::tag::bitwise_or_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::bitwise_xor">proto::tag::bitwise_xor</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::bitwise_xor_assign">proto::tag::bitwise_xor_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::comma">proto::tag::comma</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::complement">proto::tag::complement</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::dereference">proto::tag::dereference</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::divides">proto::tag::divides</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::divides_assign">proto::tag::divides_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::equal_to">proto::tag::equal_to</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::function">proto::tag::function</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::greater">proto::tag::greater</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::greater_equal">proto::tag::greater_equal</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::if_else_">proto::tag::if_else_</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::less">proto::tag::less</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::less_equal">proto::tag::less_equal</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::logical_and">proto::tag::logical_and</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::logical_not">proto::tag::logical_not</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::logical_or">proto::tag::logical_or</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::mem_ptr">proto::tag::mem_ptr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::minus">proto::tag::minus</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::minus_assign">proto::tag::minus_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::modulus">proto::tag::modulus</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::modulus_assign">proto::tag::modulus_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::multiplies">proto::tag::multiplies</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::multiplies_assign">proto::tag::multiplies_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::negate">proto::tag::negate</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::not_equal_to">proto::tag::not_equal_to</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::plus">proto::tag::plus</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::plus_assign">proto::tag::plus_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::post_dec">proto::tag::post_dec</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::post_inc">proto::tag::post_inc</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::pre_dec">proto::tag::pre_dec</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::pre_inc">proto::tag::pre_inc</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::shift_left">proto::tag::shift_left</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::shift_left_assign">proto::tag::shift_left_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::shift_right">proto::tag::shift_right</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::shift_right_assign">proto::tag::shift_right_assign</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::subscript">proto::tag::subscript</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::terminal">proto::tag::terminal</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::tag::unary_plus">proto::tag::unary_plus</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::tag_of">proto::tag_of</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::term">proto::term</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::terminal">proto::terminal</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::transform">proto::transform</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::transform_impl">proto::transform_impl</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::unary_expr">proto::unary_expr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <classname alt="boost::proto::unary_plus">proto::unary_plus</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::unexpr">proto::unexpr</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::vararg">proto::vararg</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::when">proto::when</classname>
+        </computeroutput>
+      </listitem>
+    </itemizedlist>
+  </section>
+
+  <section id="proto.reference.functions">
+    <title>Functions</title>
+    <itemizedlist>
+      <listitem>
+        <computeroutput>
+ <functionname alt="boost::proto::as_child">proto::as_child()</functionname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <functionname alt="boost::proto::as_expr">proto::as_expr()</functionname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <functionname alt="boost::proto::child">proto::child()</functionname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <functionname alt="boost::proto::child_c">proto::child_c()</functionname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <functionname alt="boost::proto::deep_copy">proto::deep_copy()</functionname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <functionname alt="boost::proto::display_expr">proto::display_expr()</functionname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <functionname alt="boost::proto::eval">proto::eval()</functionname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <functionname alt="boost::proto::flatten">proto::flatten()</functionname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <functionname alt="boost::proto::if_else">proto::if_else()</functionname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <functionname alt="boost::proto::left">proto::left()</functionname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <functionname alt="boost::proto::lit">proto::lit()</functionname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <functionname alt="boost::proto::make_expr">proto::make_expr()</functionname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <functionname alt="boost::proto::right">proto::right()</functionname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+ <functionname alt="boost::proto::unpack_expr">proto::unpack_expr()</functionname>
+        </computeroutput>
+      </listitem>
***The diff for this file has been truncated for email.***
=======================================
***Additional files exist in this changeset.***

Other related posts:

  • » [boost-doc-zh] r351 committed - 升级至1.41.0,第三批,libs/目录下m-r子目录 - boost-doc-zh