LibASTMatchersReference.html 328 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  2. "http://www.w3.org/TR/html4/strict.dtd">
  3. <html>
  4. <head>
  5. <title>AST Matcher Reference</title>
  6. <link type="text/css" rel="stylesheet" href="../menu.css" />
  7. <link type="text/css" rel="stylesheet" href="../content.css" />
  8. <style type="text/css">
  9. td {
  10. padding: .33em;
  11. }
  12. td.doc {
  13. display: none;
  14. border-bottom: 1px solid black;
  15. }
  16. td.name:hover {
  17. color: blue;
  18. cursor: pointer;
  19. }
  20. </style>
  21. <script type="text/javascript">
  22. function toggle(id) {
  23. if (!id) return;
  24. row = document.getElementById(id);
  25. if (row.style.display != 'table-cell')
  26. row.style.display = 'table-cell';
  27. else
  28. row.style.display = 'none';
  29. }
  30. </script>
  31. </head>
  32. <body onLoad="toggle(location.hash.substring(1, location.hash.length - 6))">
  33. <!--#include virtual="../menu.html.incl"-->
  34. <div id="content">
  35. <h1>AST Matcher Reference</h1>
  36. <p>This document shows all currently implemented matchers. The matchers are grouped
  37. by category and node type they match. You can click on matcher names to show the
  38. matcher's source documentation.</p>
  39. <p>There are three different basic categories of matchers:
  40. <ul>
  41. <li><a href="#decl-matchers">Node Matchers:</a> Matchers that match a specific type of AST node.</li>
  42. <li><a href="#narrowing-matchers">Narrowing Matchers:</a> Matchers that match attributes on AST nodes.</li>
  43. <li><a href="#traversal-matchers">Traversal Matchers:</a> Matchers that allow traversal between AST nodes.</li>
  44. </ul>
  45. </p>
  46. <p>Within each category the matchers are ordered by node type they match on.
  47. Note that if a matcher can match multiple node types, it will it will appear
  48. multiple times. This means that by searching for Matcher&lt;Stmt&gt; you can
  49. find all matchers that can be used to match on Stmt nodes.</p>
  50. <p>The exception to that rule are matchers that can match on any node. Those
  51. are marked with a * and are listed in the beginning of each category.</p>
  52. <p>Note that the categorization of matchers is a great help when you combine
  53. them into matcher expressions. You will usually want to form matcher expressions
  54. that read like english sentences by alternating between node matchers and
  55. narrowing or traversal matchers, like this:
  56. <pre>
  57. recordDecl(hasDescendant(
  58. ifStmt(hasTrueExpression(
  59. expr(hasDescendant(
  60. ifStmt()))))))
  61. </pre>
  62. </p>
  63. <!-- ======================================================================= -->
  64. <h2 id="decl-matchers">Node Matchers</h2>
  65. <!-- ======================================================================= -->
  66. <p>Node matchers are at the core of matcher expressions - they specify the type
  67. of node that is expected. Every match expression starts with a node matcher,
  68. which can then be further refined with a narrowing or traversal matcher. All
  69. traversal matchers take node matchers as their arguments.</p>
  70. <p>For convenience, all node matchers take an arbitrary number of arguments
  71. and implicitly act as allOf matchers.</p>
  72. <p>Node matchers are the only matchers that support the bind("id") call to
  73. bind the matched node to the given string, to be later retrieved from the
  74. match callback.</p>
  75. <p>It is important to remember that the arguments to node matchers are
  76. predicates on the same node, just with additional information about the type.
  77. This is often useful to make matcher expression more readable by inlining bind
  78. calls into redundant node matchers inside another node matcher:
  79. <pre>
  80. // This binds the CXXRecordDecl to "id", as the decl() matcher will stay on
  81. // the same node.
  82. recordDecl(decl().bind("id"), hasName("::MyClass"))
  83. </pre>
  84. </p>
  85. <table>
  86. <tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
  87. <!-- START_DECL_MATCHERS -->
  88. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;</td><td class="name" onclick="toggle('cxxCtorInitializer0')"><a name="cxxCtorInitializer0Anchor">cxxCtorInitializer</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;...</td></tr>
  89. <tr><td colspan="4" class="doc" id="cxxCtorInitializer0"><pre>Matches constructor initializers.
  90. Examples matches i(42).
  91. class C {
  92. C() : i(42) {}
  93. int i;
  94. };
  95. </pre></td></tr>
  96. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('accessSpecDecl0')"><a name="accessSpecDecl0Anchor">accessSpecDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AccessSpecDecl.html">AccessSpecDecl</a>&gt;...</td></tr>
  97. <tr><td colspan="4" class="doc" id="accessSpecDecl0"><pre>Matches C++ access specifier declarations.
  98. Given
  99. class C {
  100. public:
  101. int a;
  102. };
  103. accessSpecDecl()
  104. matches 'public:'
  105. </pre></td></tr>
  106. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('classTemplateDecl0')"><a name="classTemplateDecl0Anchor">classTemplateDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateDecl.html">ClassTemplateDecl</a>&gt;...</td></tr>
  107. <tr><td colspan="4" class="doc" id="classTemplateDecl0"><pre>Matches C++ class template declarations.
  108. Example matches Z
  109. template&lt;class T&gt; class Z {};
  110. </pre></td></tr>
  111. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('classTemplateSpecializationDecl0')"><a name="classTemplateSpecializationDecl0Anchor">classTemplateSpecializationDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>&gt;...</td></tr>
  112. <tr><td colspan="4" class="doc" id="classTemplateSpecializationDecl0"><pre>Matches C++ class template specializations.
  113. Given
  114. template&lt;typename T&gt; class A {};
  115. template&lt;&gt; class A&lt;double&gt; {};
  116. A&lt;int&gt; a;
  117. classTemplateSpecializationDecl()
  118. matches the specializations A&lt;int&gt; and A&lt;double&gt;
  119. </pre></td></tr>
  120. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('cxxConstructorDecl0')"><a name="cxxConstructorDecl0Anchor">cxxConstructorDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>&gt;...</td></tr>
  121. <tr><td colspan="4" class="doc" id="cxxConstructorDecl0"><pre>Matches C++ constructor declarations.
  122. Example matches Foo::Foo() and Foo::Foo(int)
  123. class Foo {
  124. public:
  125. Foo();
  126. Foo(int);
  127. int DoSomething();
  128. };
  129. </pre></td></tr>
  130. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('cxxConversionDecl0')"><a name="cxxConversionDecl0Anchor">cxxConversionDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConversionDecl.html">CXXConversionDecl</a>&gt;...</td></tr>
  131. <tr><td colspan="4" class="doc" id="cxxConversionDecl0"><pre>Matches conversion operator declarations.
  132. Example matches the operator.
  133. class X { operator int() const; };
  134. </pre></td></tr>
  135. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('cxxDestructorDecl0')"><a name="cxxDestructorDecl0Anchor">cxxDestructorDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXDestructorDecl.html">CXXDestructorDecl</a>&gt;...</td></tr>
  136. <tr><td colspan="4" class="doc" id="cxxDestructorDecl0"><pre>Matches explicit C++ destructor declarations.
  137. Example matches Foo::~Foo()
  138. class Foo {
  139. public:
  140. virtual ~Foo();
  141. };
  142. </pre></td></tr>
  143. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('cxxMethodDecl0')"><a name="cxxMethodDecl0Anchor">cxxMethodDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;...</td></tr>
  144. <tr><td colspan="4" class="doc" id="cxxMethodDecl0"><pre>Matches method declarations.
  145. Example matches y
  146. class X { void y(); };
  147. </pre></td></tr>
  148. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('cxxRecordDecl0')"><a name="cxxRecordDecl0Anchor">cxxRecordDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;...</td></tr>
  149. <tr><td colspan="4" class="doc" id="cxxRecordDecl0"><pre>Matches C++ class declarations.
  150. Example matches X, Z
  151. class X;
  152. template&lt;class T&gt; class Z {};
  153. </pre></td></tr>
  154. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('decl0')"><a name="decl0Anchor">decl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;...</td></tr>
  155. <tr><td colspan="4" class="doc" id="decl0"><pre>Matches declarations.
  156. Examples matches X, C, and the friend declaration inside C;
  157. void X();
  158. class C {
  159. friend X;
  160. };
  161. </pre></td></tr>
  162. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('declaratorDecl0')"><a name="declaratorDecl0Anchor">declaratorDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>&gt;...</td></tr>
  163. <tr><td colspan="4" class="doc" id="declaratorDecl0"><pre>Matches declarator declarations (field, variable, function
  164. and non-type template parameter declarations).
  165. Given
  166. class X { int y; };
  167. declaratorDecl()
  168. matches int y.
  169. </pre></td></tr>
  170. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('enumConstantDecl0')"><a name="enumConstantDecl0Anchor">enumConstantDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumConstantDecl.html">EnumConstantDecl</a>&gt;...</td></tr>
  171. <tr><td colspan="4" class="doc" id="enumConstantDecl0"><pre>Matches enum constants.
  172. Example matches A, B, C
  173. enum X {
  174. A, B, C
  175. };
  176. </pre></td></tr>
  177. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('enumDecl0')"><a name="enumDecl0Anchor">enumDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumDecl.html">EnumDecl</a>&gt;...</td></tr>
  178. <tr><td colspan="4" class="doc" id="enumDecl0"><pre>Matches enum declarations.
  179. Example matches X
  180. enum X {
  181. A, B, C
  182. };
  183. </pre></td></tr>
  184. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('fieldDecl0')"><a name="fieldDecl0Anchor">fieldDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FieldDecl.html">FieldDecl</a>&gt;...</td></tr>
  185. <tr><td colspan="4" class="doc" id="fieldDecl0"><pre>Matches field declarations.
  186. Given
  187. class X { int m; };
  188. fieldDecl()
  189. matches 'm'.
  190. </pre></td></tr>
  191. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('friendDecl0')"><a name="friendDecl0Anchor">friendDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FriendDecl.html">FriendDecl</a>&gt;...</td></tr>
  192. <tr><td colspan="4" class="doc" id="friendDecl0"><pre>Matches friend declarations.
  193. Given
  194. class X { friend void foo(); };
  195. friendDecl()
  196. matches 'friend void foo()'.
  197. </pre></td></tr>
  198. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('functionDecl0')"><a name="functionDecl0Anchor">functionDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;...</td></tr>
  199. <tr><td colspan="4" class="doc" id="functionDecl0"><pre>Matches function declarations.
  200. Example matches f
  201. void f();
  202. </pre></td></tr>
  203. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('functionTemplateDecl0')"><a name="functionTemplateDecl0Anchor">functionTemplateDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionTemplateDecl.html">FunctionTemplateDecl</a>&gt;...</td></tr>
  204. <tr><td colspan="4" class="doc" id="functionTemplateDecl0"><pre>Matches C++ function template declarations.
  205. Example matches f
  206. template&lt;class T&gt; void f(T t) {}
  207. </pre></td></tr>
  208. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('labelDecl0')"><a name="labelDecl0Anchor">labelDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelDecl.html">LabelDecl</a>&gt;...</td></tr>
  209. <tr><td colspan="4" class="doc" id="labelDecl0"><pre>Matches a declaration of label.
  210. Given
  211. goto FOO;
  212. FOO: bar();
  213. labelDecl()
  214. matches 'FOO:'
  215. </pre></td></tr>
  216. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('linkageSpecDecl0')"><a name="linkageSpecDecl0Anchor">linkageSpecDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LinkageSpecDecl.html">LinkageSpecDecl</a>&gt;...</td></tr>
  217. <tr><td colspan="4" class="doc" id="linkageSpecDecl0"><pre>Matches a declaration of a linkage specification.
  218. Given
  219. extern "C" {}
  220. linkageSpecDecl()
  221. matches "extern "C" {}"
  222. </pre></td></tr>
  223. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('namedDecl0')"><a name="namedDecl0Anchor">namedDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;...</td></tr>
  224. <tr><td colspan="4" class="doc" id="namedDecl0"><pre>Matches a declaration of anything that could have a name.
  225. Example matches X, S, the anonymous union type, i, and U;
  226. typedef int X;
  227. struct S {
  228. union {
  229. int i;
  230. } U;
  231. };
  232. </pre></td></tr>
  233. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('namespaceAliasDecl0')"><a name="namespaceAliasDecl0Anchor">namespaceAliasDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamespaceAliasDecl.html">NamespaceAliasDecl</a>&gt;...</td></tr>
  234. <tr><td colspan="4" class="doc" id="namespaceAliasDecl0"><pre>Matches a declaration of a namespace alias.
  235. Given
  236. namespace test {}
  237. namespace alias = ::test;
  238. namespaceAliasDecl()
  239. matches "namespace alias" but not "namespace test"
  240. </pre></td></tr>
  241. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('namespaceDecl0')"><a name="namespaceDecl0Anchor">namespaceDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamespaceDecl.html">NamespaceDecl</a>&gt;...</td></tr>
  242. <tr><td colspan="4" class="doc" id="namespaceDecl0"><pre>Matches a declaration of a namespace.
  243. Given
  244. namespace {}
  245. namespace test {}
  246. namespaceDecl()
  247. matches "namespace {}" and "namespace test {}"
  248. </pre></td></tr>
  249. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('nonTypeTemplateParmDecl0')"><a name="nonTypeTemplateParmDecl0Anchor">nonTypeTemplateParmDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NonTypeTemplateParmDecl.html">NonTypeTemplateParmDecl</a>&gt;...</td></tr>
  250. <tr><td colspan="4" class="doc" id="nonTypeTemplateParmDecl0"><pre>Matches non-type template parameter declarations.
  251. Given
  252. template &lt;typename T, int N&gt; struct C {};
  253. nonTypeTemplateParmDecl()
  254. matches 'N', but not 'T'.
  255. </pre></td></tr>
  256. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('objcCategoryDecl0')"><a name="objcCategoryDecl0Anchor">objcCategoryDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCCategoryDecl.html">ObjCCategoryDecl</a>&gt;...</td></tr>
  257. <tr><td colspan="4" class="doc" id="objcCategoryDecl0"><pre>Matches Objective-C category declarations.
  258. Example matches Foo (Additions)
  259. @interface Foo (Additions)
  260. @end
  261. </pre></td></tr>
  262. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('objcCategoryImplDecl0')"><a name="objcCategoryImplDecl0Anchor">objcCategoryImplDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCCategoryImplDecl.html">ObjCCategoryImplDecl</a>&gt;...</td></tr>
  263. <tr><td colspan="4" class="doc" id="objcCategoryImplDecl0"><pre>Matches Objective-C category definitions.
  264. Example matches Foo (Additions)
  265. @implementation Foo (Additions)
  266. @end
  267. </pre></td></tr>
  268. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('objcImplementationDecl0')"><a name="objcImplementationDecl0Anchor">objcImplementationDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCImplementationDecl.html">ObjCImplementationDecl</a>&gt;...</td></tr>
  269. <tr><td colspan="4" class="doc" id="objcImplementationDecl0"><pre>Matches Objective-C implementation declarations.
  270. Example matches Foo
  271. @implementation Foo
  272. @end
  273. </pre></td></tr>
  274. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('objcInterfaceDecl0')"><a name="objcInterfaceDecl0Anchor">objcInterfaceDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCInterfaceDecl.html">ObjCInterfaceDecl</a>&gt;...</td></tr>
  275. <tr><td colspan="4" class="doc" id="objcInterfaceDecl0"><pre>Matches Objective-C interface declarations.
  276. Example matches Foo
  277. @interface Foo
  278. @end
  279. </pre></td></tr>
  280. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('objcIvarDecl0')"><a name="objcIvarDecl0Anchor">objcIvarDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCIvarDecl.html">ObjCIvarDecl</a>&gt;...</td></tr>
  281. <tr><td colspan="4" class="doc" id="objcIvarDecl0"><pre>Matches Objective-C instance variable declarations.
  282. Example matches _enabled
  283. @implementation Foo {
  284. BOOL _enabled;
  285. }
  286. @end
  287. </pre></td></tr>
  288. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('objcMethodDecl0')"><a name="objcMethodDecl0Anchor">objcMethodDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCMethodDecl.html">ObjCMethodDecl</a>&gt;...</td></tr>
  289. <tr><td colspan="4" class="doc" id="objcMethodDecl0"><pre>Matches Objective-C method declarations.
  290. Example matches both declaration and definition of -[Foo method]
  291. @interface Foo
  292. - (void)method;
  293. @end
  294. @implementation Foo
  295. - (void)method {}
  296. @end
  297. </pre></td></tr>
  298. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('objcPropertyDecl0')"><a name="objcPropertyDecl0Anchor">objcPropertyDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCPropertyDecl.html">ObjCPropertyDecl</a>&gt;...</td></tr>
  299. <tr><td colspan="4" class="doc" id="objcPropertyDecl0"><pre>Matches Objective-C property declarations.
  300. Example matches enabled
  301. @interface Foo
  302. @property BOOL enabled;
  303. @end
  304. </pre></td></tr>
  305. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('objcProtocolDecl0')"><a name="objcProtocolDecl0Anchor">objcProtocolDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCProtocolDecl.html">ObjCProtocolDecl</a>&gt;...</td></tr>
  306. <tr><td colspan="4" class="doc" id="objcProtocolDecl0"><pre>Matches Objective-C protocol declarations.
  307. Example matches FooDelegate
  308. @protocol FooDelegate
  309. @end
  310. </pre></td></tr>
  311. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('parmVarDecl0')"><a name="parmVarDecl0Anchor">parmVarDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html">ParmVarDecl</a>&gt;...</td></tr>
  312. <tr><td colspan="4" class="doc" id="parmVarDecl0"><pre>Matches parameter variable declarations.
  313. Given
  314. void f(int x);
  315. parmVarDecl()
  316. matches int x.
  317. </pre></td></tr>
  318. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('recordDecl0')"><a name="recordDecl0Anchor">recordDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordDecl.html">RecordDecl</a>&gt;...</td></tr>
  319. <tr><td colspan="4" class="doc" id="recordDecl0"><pre>Matches class, struct, and union declarations.
  320. Example matches X, Z, U, and S
  321. class X;
  322. template&lt;class T&gt; class Z {};
  323. struct S {};
  324. union U {};
  325. </pre></td></tr>
  326. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('staticAssertDecl0')"><a name="staticAssertDecl0Anchor">staticAssertDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1StaticAssertDecl.html">StaticAssertDecl</a>&gt;...</td></tr>
  327. <tr><td colspan="4" class="doc" id="staticAssertDecl0"><pre>Matches a C++ static_assert declaration.
  328. Example:
  329. staticAssertExpr()
  330. matches
  331. static_assert(sizeof(S) == sizeof(int))
  332. in
  333. struct S {
  334. int x;
  335. };
  336. static_assert(sizeof(S) == sizeof(int));
  337. </pre></td></tr>
  338. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('templateTypeParmDecl0')"><a name="templateTypeParmDecl0Anchor">templateTypeParmDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmDecl.html">TemplateTypeParmDecl</a>&gt;...</td></tr>
  339. <tr><td colspan="4" class="doc" id="templateTypeParmDecl0"><pre>Matches template type parameter declarations.
  340. Given
  341. template &lt;typename T, int N&gt; struct C {};
  342. templateTypeParmDecl()
  343. matches 'T', but not 'N'.
  344. </pre></td></tr>
  345. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('translationUnitDecl0')"><a name="translationUnitDecl0Anchor">translationUnitDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TranslationUnitDecl.html">TranslationUnitDecl</a>&gt;...</td></tr>
  346. <tr><td colspan="4" class="doc" id="translationUnitDecl0"><pre>Matches the top declaration context.
  347. Given
  348. int X;
  349. namespace NS {
  350. int Y;
  351. } namespace NS
  352. decl(hasDeclContext(translationUnitDecl()))
  353. matches "int X", but not "int Y".
  354. </pre></td></tr>
  355. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('typeAliasDecl0')"><a name="typeAliasDecl0Anchor">typeAliasDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeAliasDecl.html">TypeAliasDecl</a>&gt;...</td></tr>
  356. <tr><td colspan="4" class="doc" id="typeAliasDecl0"><pre>Matches type alias declarations.
  357. Given
  358. typedef int X;
  359. using Y = int;
  360. typeAliasDecl()
  361. matches "using Y = int", but not "typedef int X"
  362. </pre></td></tr>
  363. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('typeAliasTemplateDecl0')"><a name="typeAliasTemplateDecl0Anchor">typeAliasTemplateDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeAliasTemplateDecl.html">TypeAliasTemplateDecl</a>&gt;...</td></tr>
  364. <tr><td colspan="4" class="doc" id="typeAliasTemplateDecl0"><pre>Matches type alias template declarations.
  365. typeAliasTemplateDecl() matches
  366. template &lt;typename T&gt;
  367. using Y = X&lt;T&gt;;
  368. </pre></td></tr>
  369. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('typedefDecl0')"><a name="typedefDecl0Anchor">typedefDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefDecl.html">TypedefDecl</a>&gt;...</td></tr>
  370. <tr><td colspan="4" class="doc" id="typedefDecl0"><pre>Matches typedef declarations.
  371. Given
  372. typedef int X;
  373. using Y = int;
  374. typedefDecl()
  375. matches "typedef int X", but not "using Y = int"
  376. </pre></td></tr>
  377. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('typedefNameDecl0')"><a name="typedefNameDecl0Anchor">typedefNameDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>&gt;...</td></tr>
  378. <tr><td colspan="4" class="doc" id="typedefNameDecl0"><pre>Matches typedef name declarations.
  379. Given
  380. typedef int X;
  381. using Y = int;
  382. typedefNameDecl()
  383. matches "typedef int X" and "using Y = int"
  384. </pre></td></tr>
  385. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('unresolvedUsingTypenameDecl0')"><a name="unresolvedUsingTypenameDecl0Anchor">unresolvedUsingTypenameDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingTypenameDecl.html">UnresolvedUsingTypenameDecl</a>&gt;...</td></tr>
  386. <tr><td colspan="4" class="doc" id="unresolvedUsingTypenameDecl0"><pre>Matches unresolved using value declarations that involve the
  387. typename.
  388. Given
  389. template &lt;typename T&gt;
  390. struct Base { typedef T Foo; };
  391. template&lt;typename T&gt;
  392. struct S : private Base&lt;T&gt; {
  393. using typename Base&lt;T&gt;::Foo;
  394. };
  395. unresolvedUsingTypenameDecl()
  396. matches using Base&lt;T&gt;::Foo </pre></td></tr>
  397. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('unresolvedUsingValueDecl0')"><a name="unresolvedUsingValueDecl0Anchor">unresolvedUsingValueDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingValueDecl.html">UnresolvedUsingValueDecl</a>&gt;...</td></tr>
  398. <tr><td colspan="4" class="doc" id="unresolvedUsingValueDecl0"><pre>Matches unresolved using value declarations.
  399. Given
  400. template&lt;typename X&gt;
  401. class C : private X {
  402. using X::x;
  403. };
  404. unresolvedUsingValueDecl()
  405. matches using X::x </pre></td></tr>
  406. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('usingDecl0')"><a name="usingDecl0Anchor">usingDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingDecl.html">UsingDecl</a>&gt;...</td></tr>
  407. <tr><td colspan="4" class="doc" id="usingDecl0"><pre>Matches using declarations.
  408. Given
  409. namespace X { int x; }
  410. using X::x;
  411. usingDecl()
  412. matches using X::x </pre></td></tr>
  413. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('usingDirectiveDecl0')"><a name="usingDirectiveDecl0Anchor">usingDirectiveDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingDirectiveDecl.html">UsingDirectiveDecl</a>&gt;...</td></tr>
  414. <tr><td colspan="4" class="doc" id="usingDirectiveDecl0"><pre>Matches using namespace declarations.
  415. Given
  416. namespace X { int x; }
  417. using namespace X;
  418. usingDirectiveDecl()
  419. matches using namespace X </pre></td></tr>
  420. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('valueDecl0')"><a name="valueDecl0Anchor">valueDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt;...</td></tr>
  421. <tr><td colspan="4" class="doc" id="valueDecl0"><pre>Matches any value declaration.
  422. Example matches A, B, C and F
  423. enum X { A, B, C };
  424. void F();
  425. </pre></td></tr>
  426. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('varDecl0')"><a name="varDecl0Anchor">varDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;...</td></tr>
  427. <tr><td colspan="4" class="doc" id="varDecl0"><pre>Matches variable declarations.
  428. Note: this does not match declarations of member variables, which are
  429. "field" declarations in Clang parlance.
  430. Example matches a
  431. int a;
  432. </pre></td></tr>
  433. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;</td><td class="name" onclick="toggle('nestedNameSpecifierLoc0')"><a name="nestedNameSpecifierLoc0Anchor">nestedNameSpecifierLoc</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;...</td></tr>
  434. <tr><td colspan="4" class="doc" id="nestedNameSpecifierLoc0"><pre>Same as nestedNameSpecifier but matches NestedNameSpecifierLoc.
  435. </pre></td></tr>
  436. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;</td><td class="name" onclick="toggle('nestedNameSpecifier0')"><a name="nestedNameSpecifier0Anchor">nestedNameSpecifier</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;...</td></tr>
  437. <tr><td colspan="4" class="doc" id="nestedNameSpecifier0"><pre>Matches nested name specifiers.
  438. Given
  439. namespace ns {
  440. struct A { static void f(); };
  441. void A::f() {}
  442. void g() { A::f(); }
  443. }
  444. ns::A a;
  445. nestedNameSpecifier()
  446. matches "ns::" and both "A::"
  447. </pre></td></tr>
  448. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('qualType0')"><a name="qualType0Anchor">qualType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;...</td></tr>
  449. <tr><td colspan="4" class="doc" id="qualType0"><pre>Matches QualTypes in the clang AST.
  450. </pre></td></tr>
  451. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('addrLabelExpr0')"><a name="addrLabelExpr0Anchor">addrLabelExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;...</td></tr>
  452. <tr><td colspan="4" class="doc" id="addrLabelExpr0"><pre>Matches address of label statements (GNU extension).
  453. Given
  454. FOO: bar();
  455. void *ptr = &amp;&amp;FOO;
  456. goto *bar;
  457. addrLabelExpr()
  458. matches '&amp;&amp;FOO'
  459. </pre></td></tr>
  460. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('arraySubscriptExpr0')"><a name="arraySubscriptExpr0Anchor">arraySubscriptExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ArraySubscriptExpr.html">ArraySubscriptExpr</a>&gt;...</td></tr>
  461. <tr><td colspan="4" class="doc" id="arraySubscriptExpr0"><pre>Matches array subscript expressions.
  462. Given
  463. int i = a[1];
  464. arraySubscriptExpr()
  465. matches "a[1]"
  466. </pre></td></tr>
  467. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('asmStmt0')"><a name="asmStmt0Anchor">asmStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AsmStmt.html">AsmStmt</a>&gt;...</td></tr>
  468. <tr><td colspan="4" class="doc" id="asmStmt0"><pre>Matches asm statements.
  469. int i = 100;
  470. __asm("mov al, 2");
  471. asmStmt()
  472. matches '__asm("mov al, 2")'
  473. </pre></td></tr>
  474. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('atomicExpr0')"><a name="atomicExpr0Anchor">atomicExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicExpr.html">AtomicExpr</a>&gt;...</td></tr>
  475. <tr><td colspan="4" class="doc" id="atomicExpr0"><pre>Matches atomic builtins.
  476. Example matches __atomic_load_n(ptr, 1)
  477. void foo() { int *ptr; __atomic_load_n(ptr, 1); }
  478. </pre></td></tr>
  479. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('binaryConditionalOperator0')"><a name="binaryConditionalOperator0Anchor">binaryConditionalOperator</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryConditionalOperator.html">BinaryConditionalOperator</a>&gt;...</td></tr>
  480. <tr><td colspan="4" class="doc" id="binaryConditionalOperator0"><pre>Matches binary conditional operator expressions (GNU extension).
  481. Example matches a ?: b
  482. (a ?: b) + 42;
  483. </pre></td></tr>
  484. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('binaryOperator0')"><a name="binaryOperator0Anchor">binaryOperator</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;...</td></tr>
  485. <tr><td colspan="4" class="doc" id="binaryOperator0"><pre>Matches binary operator expressions.
  486. Example matches a || b
  487. !(a || b)
  488. </pre></td></tr>
  489. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('breakStmt0')"><a name="breakStmt0Anchor">breakStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BreakStmt.html">BreakStmt</a>&gt;...</td></tr>
  490. <tr><td colspan="4" class="doc" id="breakStmt0"><pre>Matches break statements.
  491. Given
  492. while (true) { break; }
  493. breakStmt()
  494. matches 'break'
  495. </pre></td></tr>
  496. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cStyleCastExpr0')"><a name="cStyleCastExpr0Anchor">cStyleCastExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CStyleCastExpr.html">CStyleCastExpr</a>&gt;...</td></tr>
  497. <tr><td colspan="4" class="doc" id="cStyleCastExpr0"><pre>Matches a C-style cast expression.
  498. Example: Matches (int) 2.2f in
  499. int i = (int) 2.2f;
  500. </pre></td></tr>
  501. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('callExpr0')"><a name="callExpr0Anchor">callExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;...</td></tr>
  502. <tr><td colspan="4" class="doc" id="callExpr0"><pre>Matches call expressions.
  503. Example matches x.y() and y()
  504. X x;
  505. x.y();
  506. y();
  507. </pre></td></tr>
  508. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('caseStmt0')"><a name="caseStmt0Anchor">caseStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CaseStmt.html">CaseStmt</a>&gt;...</td></tr>
  509. <tr><td colspan="4" class="doc" id="caseStmt0"><pre>Matches case statements inside switch statements.
  510. Given
  511. switch(a) { case 42: break; default: break; }
  512. caseStmt()
  513. matches 'case 42: break;'.
  514. </pre></td></tr>
  515. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('castExpr0')"><a name="castExpr0Anchor">castExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CastExpr.html">CastExpr</a>&gt;...</td></tr>
  516. <tr><td colspan="4" class="doc" id="castExpr0"><pre>Matches any cast nodes of Clang's AST.
  517. Example: castExpr() matches each of the following:
  518. (int) 3;
  519. const_cast&lt;Expr *&gt;(SubExpr);
  520. char c = 0;
  521. but does not match
  522. int i = (0);
  523. int k = 0;
  524. </pre></td></tr>
  525. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('characterLiteral0')"><a name="characterLiteral0Anchor">characterLiteral</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;...</td></tr>
  526. <tr><td colspan="4" class="doc" id="characterLiteral0"><pre>Matches character literals (also matches wchar_t).
  527. Not matching Hex-encoded chars (e.g. 0x1234, which is a IntegerLiteral),
  528. though.
  529. Example matches 'a', L'a'
  530. char ch = 'a';
  531. wchar_t chw = L'a';
  532. </pre></td></tr>
  533. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('compoundLiteralExpr0')"><a name="compoundLiteralExpr0Anchor">compoundLiteralExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>&gt;...</td></tr>
  534. <tr><td colspan="4" class="doc" id="compoundLiteralExpr0"><pre>Matches compound (i.e. non-scalar) literals
  535. Example match: {1}, (1, 2)
  536. int array[4] = {1};
  537. vector int myvec = (vector int)(1, 2);
  538. </pre></td></tr>
  539. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('compoundStmt0')"><a name="compoundStmt0Anchor">compoundStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CompoundStmt.html">CompoundStmt</a>&gt;...</td></tr>
  540. <tr><td colspan="4" class="doc" id="compoundStmt0"><pre>Matches compound statements.
  541. Example matches '{}' and '{{}}'in 'for (;;) {{}}'
  542. for (;;) {{}}
  543. </pre></td></tr>
  544. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('conditionalOperator0')"><a name="conditionalOperator0Anchor">conditionalOperator</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ConditionalOperator.html">ConditionalOperator</a>&gt;...</td></tr>
  545. <tr><td colspan="4" class="doc" id="conditionalOperator0"><pre>Matches conditional operator expressions.
  546. Example matches a ? b : c
  547. (a ? b : c) + 42
  548. </pre></td></tr>
  549. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('continueStmt0')"><a name="continueStmt0Anchor">continueStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ContinueStmt.html">ContinueStmt</a>&gt;...</td></tr>
  550. <tr><td colspan="4" class="doc" id="continueStmt0"><pre>Matches continue statements.
  551. Given
  552. while (true) { continue; }
  553. continueStmt()
  554. matches 'continue'
  555. </pre></td></tr>
  556. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cudaKernelCallExpr0')"><a name="cudaKernelCallExpr0Anchor">cudaKernelCallExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CUDAKernelCallExpr.html">CUDAKernelCallExpr</a>&gt;...</td></tr>
  557. <tr><td colspan="4" class="doc" id="cudaKernelCallExpr0"><pre>Matches CUDA kernel call expression.
  558. Example matches,
  559. kernel&lt;&lt;&lt;i,j&gt;&gt;&gt;();
  560. </pre></td></tr>
  561. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxBindTemporaryExpr0')"><a name="cxxBindTemporaryExpr0Anchor">cxxBindTemporaryExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXBindTemporaryExpr.html">CXXBindTemporaryExpr</a>&gt;...</td></tr>
  562. <tr><td colspan="4" class="doc" id="cxxBindTemporaryExpr0"><pre>Matches nodes where temporaries are created.
  563. Example matches FunctionTakesString(GetStringByValue())
  564. (matcher = cxxBindTemporaryExpr())
  565. FunctionTakesString(GetStringByValue());
  566. FunctionTakesStringByPointer(GetStringPointer());
  567. </pre></td></tr>
  568. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxBoolLiteral0')"><a name="cxxBoolLiteral0Anchor">cxxBoolLiteral</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXBoolLiteralExpr.html">CXXBoolLiteralExpr</a>&gt;...</td></tr>
  569. <tr><td colspan="4" class="doc" id="cxxBoolLiteral0"><pre>Matches bool literals.
  570. Example matches true
  571. true
  572. </pre></td></tr>
  573. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxCatchStmt0')"><a name="cxxCatchStmt0Anchor">cxxCatchStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCatchStmt.html">CXXCatchStmt</a>&gt;...</td></tr>
  574. <tr><td colspan="4" class="doc" id="cxxCatchStmt0"><pre>Matches catch statements.
  575. try {} catch(int i) {}
  576. cxxCatchStmt()
  577. matches 'catch(int i)'
  578. </pre></td></tr>
  579. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxConstCastExpr0')"><a name="cxxConstCastExpr0Anchor">cxxConstCastExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstCastExpr.html">CXXConstCastExpr</a>&gt;...</td></tr>
  580. <tr><td colspan="4" class="doc" id="cxxConstCastExpr0"><pre>Matches a const_cast expression.
  581. Example: Matches const_cast&lt;int*&gt;(&amp;r) in
  582. int n = 42;
  583. const int &amp;r(n);
  584. int* p = const_cast&lt;int*&gt;(&amp;r);
  585. </pre></td></tr>
  586. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxConstructExpr0')"><a name="cxxConstructExpr0Anchor">cxxConstructExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;...</td></tr>
  587. <tr><td colspan="4" class="doc" id="cxxConstructExpr0"><pre>Matches constructor call expressions (including implicit ones).
  588. Example matches string(ptr, n) and ptr within arguments of f
  589. (matcher = cxxConstructExpr())
  590. void f(const string &amp;a, const string &amp;b);
  591. char *ptr;
  592. int n;
  593. f(string(ptr, n), ptr);
  594. </pre></td></tr>
  595. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxDefaultArgExpr0')"><a name="cxxDefaultArgExpr0Anchor">cxxDefaultArgExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXDefaultArgExpr.html">CXXDefaultArgExpr</a>&gt;...</td></tr>
  596. <tr><td colspan="4" class="doc" id="cxxDefaultArgExpr0"><pre>Matches the value of a default argument at the call site.
  597. Example matches the CXXDefaultArgExpr placeholder inserted for the
  598. default value of the second parameter in the call expression f(42)
  599. (matcher = cxxDefaultArgExpr())
  600. void f(int x, int y = 0);
  601. f(42);
  602. </pre></td></tr>
  603. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxDeleteExpr0')"><a name="cxxDeleteExpr0Anchor">cxxDeleteExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXDeleteExpr.html">CXXDeleteExpr</a>&gt;...</td></tr>
  604. <tr><td colspan="4" class="doc" id="cxxDeleteExpr0"><pre>Matches delete expressions.
  605. Given
  606. delete X;
  607. cxxDeleteExpr()
  608. matches 'delete X'.
  609. </pre></td></tr>
  610. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxDynamicCastExpr0')"><a name="cxxDynamicCastExpr0Anchor">cxxDynamicCastExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXDynamicCastExpr.html">CXXDynamicCastExpr</a>&gt;...</td></tr>
  611. <tr><td colspan="4" class="doc" id="cxxDynamicCastExpr0"><pre>Matches a dynamic_cast expression.
  612. Example:
  613. cxxDynamicCastExpr()
  614. matches
  615. dynamic_cast&lt;D*&gt;(&amp;b);
  616. in
  617. struct B { virtual ~B() {} }; struct D : B {};
  618. B b;
  619. D* p = dynamic_cast&lt;D*&gt;(&amp;b);
  620. </pre></td></tr>
  621. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxForRangeStmt0')"><a name="cxxForRangeStmt0Anchor">cxxForRangeStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a>&gt;...</td></tr>
  622. <tr><td colspan="4" class="doc" id="cxxForRangeStmt0"><pre>Matches range-based for statements.
  623. cxxForRangeStmt() matches 'for (auto a : i)'
  624. int i[] = {1, 2, 3}; for (auto a : i);
  625. for(int j = 0; j &lt; 5; ++j);
  626. </pre></td></tr>
  627. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxFunctionalCastExpr0')"><a name="cxxFunctionalCastExpr0Anchor">cxxFunctionalCastExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>&gt;...</td></tr>
  628. <tr><td colspan="4" class="doc" id="cxxFunctionalCastExpr0"><pre>Matches functional cast expressions
  629. Example: Matches Foo(bar);
  630. Foo f = bar;
  631. Foo g = (Foo) bar;
  632. Foo h = Foo(bar);
  633. </pre></td></tr>
  634. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxMemberCallExpr0')"><a name="cxxMemberCallExpr0Anchor">cxxMemberCallExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;...</td></tr>
  635. <tr><td colspan="4" class="doc" id="cxxMemberCallExpr0"><pre>Matches member call expressions.
  636. Example matches x.y()
  637. X x;
  638. x.y();
  639. </pre></td></tr>
  640. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxNewExpr0')"><a name="cxxNewExpr0Anchor">cxxNewExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;...</td></tr>
  641. <tr><td colspan="4" class="doc" id="cxxNewExpr0"><pre>Matches new expressions.
  642. Given
  643. new X;
  644. cxxNewExpr()
  645. matches 'new X'.
  646. </pre></td></tr>
  647. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxNullPtrLiteralExpr0')"><a name="cxxNullPtrLiteralExpr0Anchor">cxxNullPtrLiteralExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNullPtrLiteralExpr.html">CXXNullPtrLiteralExpr</a>&gt;...</td></tr>
  648. <tr><td colspan="4" class="doc" id="cxxNullPtrLiteralExpr0"><pre>Matches nullptr literal.
  649. </pre></td></tr>
  650. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxOperatorCallExpr0')"><a name="cxxOperatorCallExpr0Anchor">cxxOperatorCallExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXOperatorCallExpr.html">CXXOperatorCallExpr</a>&gt;...</td></tr>
  651. <tr><td colspan="4" class="doc" id="cxxOperatorCallExpr0"><pre>Matches overloaded operator calls.
  652. Note that if an operator isn't overloaded, it won't match. Instead, use
  653. binaryOperator matcher.
  654. Currently it does not match operators such as new delete.
  655. FIXME: figure out why these do not match?
  656. Example matches both operator&lt;&lt;((o &lt;&lt; b), c) and operator&lt;&lt;(o, b)
  657. (matcher = cxxOperatorCallExpr())
  658. ostream &amp;operator&lt;&lt; (ostream &amp;out, int i) { };
  659. ostream &amp;o; int b = 1, c = 1;
  660. o &lt;&lt; b &lt;&lt; c;
  661. </pre></td></tr>
  662. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxReinterpretCastExpr0')"><a name="cxxReinterpretCastExpr0Anchor">cxxReinterpretCastExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXReinterpretCastExpr.html">CXXReinterpretCastExpr</a>&gt;...</td></tr>
  663. <tr><td colspan="4" class="doc" id="cxxReinterpretCastExpr0"><pre>Matches a reinterpret_cast expression.
  664. Either the source expression or the destination type can be matched
  665. using has(), but hasDestinationType() is more specific and can be
  666. more readable.
  667. Example matches reinterpret_cast&lt;char*&gt;(&amp;p) in
  668. void* p = reinterpret_cast&lt;char*&gt;(&amp;p);
  669. </pre></td></tr>
  670. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxStaticCastExpr0')"><a name="cxxStaticCastExpr0Anchor">cxxStaticCastExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXStaticCastExpr.html">CXXStaticCastExpr</a>&gt;...</td></tr>
  671. <tr><td colspan="4" class="doc" id="cxxStaticCastExpr0"><pre>Matches a C++ static_cast expression.
  672. See also: hasDestinationType
  673. See also: reinterpretCast
  674. Example:
  675. cxxStaticCastExpr()
  676. matches
  677. static_cast&lt;long&gt;(8)
  678. in
  679. long eight(static_cast&lt;long&gt;(8));
  680. </pre></td></tr>
  681. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxStdInitializerListExpr0')"><a name="cxxStdInitializerListExpr0Anchor">cxxStdInitializerListExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXStdInitializerListExpr.html">CXXStdInitializerListExpr</a>&gt;...</td></tr>
  682. <tr><td colspan="4" class="doc" id="cxxStdInitializerListExpr0"><pre>Matches C++ initializer list expressions.
  683. Given
  684. std::vector&lt;int&gt; a({ 1, 2, 3 });
  685. std::vector&lt;int&gt; b = { 4, 5 };
  686. int c[] = { 6, 7 };
  687. std::pair&lt;int, int&gt; d = { 8, 9 };
  688. cxxStdInitializerListExpr()
  689. matches "{ 1, 2, 3 }" and "{ 4, 5 }"
  690. </pre></td></tr>
  691. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxTemporaryObjectExpr0')"><a name="cxxTemporaryObjectExpr0Anchor">cxxTemporaryObjectExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>&gt;...</td></tr>
  692. <tr><td colspan="4" class="doc" id="cxxTemporaryObjectExpr0"><pre>Matches functional cast expressions having N != 1 arguments
  693. Example: Matches Foo(bar, bar)
  694. Foo h = Foo(bar, bar);
  695. </pre></td></tr>
  696. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxThisExpr0')"><a name="cxxThisExpr0Anchor">cxxThisExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXThisExpr.html">CXXThisExpr</a>&gt;...</td></tr>
  697. <tr><td colspan="4" class="doc" id="cxxThisExpr0"><pre>Matches implicit and explicit this expressions.
  698. Example matches the implicit this expression in "return i".
  699. (matcher = cxxThisExpr())
  700. struct foo {
  701. int i;
  702. int f() { return i; }
  703. };
  704. </pre></td></tr>
  705. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxThrowExpr0')"><a name="cxxThrowExpr0Anchor">cxxThrowExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXThrowExpr.html">CXXThrowExpr</a>&gt;...</td></tr>
  706. <tr><td colspan="4" class="doc" id="cxxThrowExpr0"><pre>Matches throw expressions.
  707. try { throw 5; } catch(int i) {}
  708. cxxThrowExpr()
  709. matches 'throw 5'
  710. </pre></td></tr>
  711. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxTryStmt0')"><a name="cxxTryStmt0Anchor">cxxTryStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXTryStmt.html">CXXTryStmt</a>&gt;...</td></tr>
  712. <tr><td colspan="4" class="doc" id="cxxTryStmt0"><pre>Matches try statements.
  713. try {} catch(int i) {}
  714. cxxTryStmt()
  715. matches 'try {}'
  716. </pre></td></tr>
  717. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cxxUnresolvedConstructExpr0')"><a name="cxxUnresolvedConstructExpr0Anchor">cxxUnresolvedConstructExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>&gt;...</td></tr>
  718. <tr><td colspan="4" class="doc" id="cxxUnresolvedConstructExpr0"><pre>Matches unresolved constructor call expressions.
  719. Example matches T(t) in return statement of f
  720. (matcher = cxxUnresolvedConstructExpr())
  721. template &lt;typename T&gt;
  722. void f(const T&amp; t) { return T(t); }
  723. </pre></td></tr>
  724. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('declRefExpr0')"><a name="declRefExpr0Anchor">declRefExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;...</td></tr>
  725. <tr><td colspan="4" class="doc" id="declRefExpr0"><pre>Matches expressions that refer to declarations.
  726. Example matches x in if (x)
  727. bool x;
  728. if (x) {}
  729. </pre></td></tr>
  730. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('declStmt0')"><a name="declStmt0Anchor">declStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt;...</td></tr>
  731. <tr><td colspan="4" class="doc" id="declStmt0"><pre>Matches declaration statements.
  732. Given
  733. int a;
  734. declStmt()
  735. matches 'int a'.
  736. </pre></td></tr>
  737. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('defaultStmt0')"><a name="defaultStmt0Anchor">defaultStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DefaultStmt.html">DefaultStmt</a>&gt;...</td></tr>
  738. <tr><td colspan="4" class="doc" id="defaultStmt0"><pre>Matches default statements inside switch statements.
  739. Given
  740. switch(a) { case 42: break; default: break; }
  741. defaultStmt()
  742. matches 'default: break;'.
  743. </pre></td></tr>
  744. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('designatedInitExpr0')"><a name="designatedInitExpr0Anchor">designatedInitExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DesignatedInitExpr.html">DesignatedInitExpr</a>&gt;...</td></tr>
  745. <tr><td colspan="4" class="doc" id="designatedInitExpr0"><pre>Matches C99 designated initializer expressions [C99 6.7.8].
  746. Example: Matches { [2].y = 1.0, [0].x = 1.0 }
  747. point ptarray[10] = { [2].y = 1.0, [0].x = 1.0 };
  748. </pre></td></tr>
  749. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('doStmt0')"><a name="doStmt0Anchor">doStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DoStmt.html">DoStmt</a>&gt;...</td></tr>
  750. <tr><td colspan="4" class="doc" id="doStmt0"><pre>Matches do statements.
  751. Given
  752. do {} while (true);
  753. doStmt()
  754. matches 'do {} while(true)'
  755. </pre></td></tr>
  756. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('explicitCastExpr0')"><a name="explicitCastExpr0Anchor">explicitCastExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>&gt;...</td></tr>
  757. <tr><td colspan="4" class="doc" id="explicitCastExpr0"><pre>Matches explicit cast expressions.
  758. Matches any cast expression written in user code, whether it be a
  759. C-style cast, a functional-style cast, or a keyword cast.
  760. Does not match implicit conversions.
  761. Note: the name "explicitCast" is chosen to match Clang's terminology, as
  762. Clang uses the term "cast" to apply to implicit conversions as well as to
  763. actual cast expressions.
  764. See also: hasDestinationType.
  765. Example: matches all five of the casts in
  766. int((int)(reinterpret_cast&lt;int&gt;(static_cast&lt;int&gt;(const_cast&lt;int&gt;(42)))))
  767. but does not match the implicit conversion in
  768. long ell = 42;
  769. </pre></td></tr>
  770. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('expr0')"><a name="expr0Anchor">expr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;...</td></tr>
  771. <tr><td colspan="4" class="doc" id="expr0"><pre>Matches expressions.
  772. Example matches x()
  773. void f() { x(); }
  774. </pre></td></tr>
  775. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('exprWithCleanups0')"><a name="exprWithCleanups0Anchor">exprWithCleanups</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ExprWithCleanups.html">ExprWithCleanups</a>&gt;...</td></tr>
  776. <tr><td colspan="4" class="doc" id="exprWithCleanups0"><pre>Matches expressions that introduce cleanups to be run at the end
  777. of the sub-expression's evaluation.
  778. Example matches std::string()
  779. const std::string str = std::string();
  780. </pre></td></tr>
  781. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('floatLiteral0')"><a name="floatLiteral0Anchor">floatLiteral</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;...</td></tr>
  782. <tr><td colspan="4" class="doc" id="floatLiteral0"><pre>Matches float literals of all sizes encodings, e.g.
  783. 1.0, 1.0f, 1.0L and 1e10.
  784. Does not match implicit conversions such as
  785. float a = 10;
  786. </pre></td></tr>
  787. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('forStmt0')"><a name="forStmt0Anchor">forStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;...</td></tr>
  788. <tr><td colspan="4" class="doc" id="forStmt0"><pre>Matches for statements.
  789. Example matches 'for (;;) {}'
  790. for (;;) {}
  791. int i[] = {1, 2, 3}; for (auto a : i);
  792. </pre></td></tr>
  793. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('gnuNullExpr0')"><a name="gnuNullExpr0Anchor">gnuNullExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1GNUNullExpr.html">GNUNullExpr</a>&gt;...</td></tr>
  794. <tr><td colspan="4" class="doc" id="gnuNullExpr0"><pre>Matches GNU __null expression.
  795. </pre></td></tr>
  796. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('gotoStmt0')"><a name="gotoStmt0Anchor">gotoStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1GotoStmt.html">GotoStmt</a>&gt;...</td></tr>
  797. <tr><td colspan="4" class="doc" id="gotoStmt0"><pre>Matches goto statements.
  798. Given
  799. goto FOO;
  800. FOO: bar();
  801. gotoStmt()
  802. matches 'goto FOO'
  803. </pre></td></tr>
  804. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('ifStmt0')"><a name="ifStmt0Anchor">ifStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;...</td></tr>
  805. <tr><td colspan="4" class="doc" id="ifStmt0"><pre>Matches if statements.
  806. Example matches 'if (x) {}'
  807. if (x) {}
  808. </pre></td></tr>
  809. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('implicitCastExpr0')"><a name="implicitCastExpr0Anchor">implicitCastExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ImplicitCastExpr.html">ImplicitCastExpr</a>&gt;...</td></tr>
  810. <tr><td colspan="4" class="doc" id="implicitCastExpr0"><pre>Matches the implicit cast nodes of Clang's AST.
  811. This matches many different places, including function call return value
  812. eliding, as well as any type conversions.
  813. </pre></td></tr>
  814. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('implicitValueInitExpr0')"><a name="implicitValueInitExpr0Anchor">implicitValueInitExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ImplicitValueInitExpr.html">ImplicitValueInitExpr</a>&gt;...</td></tr>
  815. <tr><td colspan="4" class="doc" id="implicitValueInitExpr0"><pre>Matches implicit initializers of init list expressions.
  816. Given
  817. point ptarray[10] = { [2].y = 1.0, [2].x = 2.0, [0].x = 1.0 };
  818. implicitValueInitExpr()
  819. matches "[0].y" (implicitly)
  820. </pre></td></tr>
  821. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('initListExpr0')"><a name="initListExpr0Anchor">initListExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InitListExpr.html">InitListExpr</a>&gt;...</td></tr>
  822. <tr><td colspan="4" class="doc" id="initListExpr0"><pre>Matches init list expressions.
  823. Given
  824. int a[] = { 1, 2 };
  825. struct B { int x, y; };
  826. B b = { 5, 6 };
  827. initListExpr()
  828. matches "{ 1, 2 }" and "{ 5, 6 }"
  829. </pre></td></tr>
  830. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('integerLiteral0')"><a name="integerLiteral0Anchor">integerLiteral</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;...</td></tr>
  831. <tr><td colspan="4" class="doc" id="integerLiteral0"><pre>Matches integer literals of all sizes encodings, e.g.
  832. 1, 1L, 0x1 and 1U.
  833. Does not match character-encoded integers such as L'a'.
  834. </pre></td></tr>
  835. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('labelStmt0')"><a name="labelStmt0Anchor">labelStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;...</td></tr>
  836. <tr><td colspan="4" class="doc" id="labelStmt0"><pre>Matches label statements.
  837. Given
  838. goto FOO;
  839. FOO: bar();
  840. labelStmt()
  841. matches 'FOO:'
  842. </pre></td></tr>
  843. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('lambdaExpr0')"><a name="lambdaExpr0Anchor">lambdaExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LambdaExpr.html">LambdaExpr</a>&gt;...</td></tr>
  844. <tr><td colspan="4" class="doc" id="lambdaExpr0"><pre>Matches lambda expressions.
  845. Example matches [&amp;](){return 5;}
  846. [&amp;](){return 5;}
  847. </pre></td></tr>
  848. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('materializeTemporaryExpr0')"><a name="materializeTemporaryExpr0Anchor">materializeTemporaryExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MaterializeTemporaryExpr.html">MaterializeTemporaryExpr</a>&gt;...</td></tr>
  849. <tr><td colspan="4" class="doc" id="materializeTemporaryExpr0"><pre>Matches nodes where temporaries are materialized.
  850. Example: Given
  851. struct T {void func();};
  852. T f();
  853. void g(T);
  854. materializeTemporaryExpr() matches 'f()' in these statements
  855. T u(f());
  856. g(f());
  857. but does not match
  858. f();
  859. f().func();
  860. </pre></td></tr>
  861. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('memberExpr0')"><a name="memberExpr0Anchor">memberExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;...</td></tr>
  862. <tr><td colspan="4" class="doc" id="memberExpr0"><pre>Matches member expressions.
  863. Given
  864. class Y {
  865. void x() { this-&gt;x(); x(); Y y; y.x(); a; this-&gt;b; Y::b; }
  866. int a; static int b;
  867. };
  868. memberExpr()
  869. matches this-&gt;x, x, y.x, a, this-&gt;b
  870. </pre></td></tr>
  871. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('nullStmt0')"><a name="nullStmt0Anchor">nullStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NullStmt.html">NullStmt</a>&gt;...</td></tr>
  872. <tr><td colspan="4" class="doc" id="nullStmt0"><pre>Matches null statements.
  873. foo();;
  874. nullStmt()
  875. matches the second ';'
  876. </pre></td></tr>
  877. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('objcMessageExpr0')"><a name="objcMessageExpr0Anchor">objcMessageExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>&gt;...</td></tr>
  878. <tr><td colspan="4" class="doc" id="objcMessageExpr0"><pre>Matches ObjectiveC Message invocation expressions.
  879. The innermost message send invokes the "alloc" class method on the
  880. NSString class, while the outermost message send invokes the
  881. "initWithString" instance method on the object returned from
  882. NSString's "alloc". This matcher should match both message sends.
  883. [[NSString alloc] initWithString:@"Hello"]
  884. </pre></td></tr>
  885. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('opaqueValueExpr0')"><a name="opaqueValueExpr0Anchor">opaqueValueExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1OpaqueValueExpr.html">OpaqueValueExpr</a>&gt;...</td></tr>
  886. <tr><td colspan="4" class="doc" id="opaqueValueExpr0"><pre>Matches opaque value expressions. They are used as helpers
  887. to reference another expressions and can be met
  888. in BinaryConditionalOperators, for example.
  889. Example matches 'a'
  890. (a ?: c) + 42;
  891. </pre></td></tr>
  892. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('parenExpr0')"><a name="parenExpr0Anchor">parenExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ParenExpr.html">ParenExpr</a>&gt;...</td></tr>
  893. <tr><td colspan="4" class="doc" id="parenExpr0"><pre>Matches parentheses used in expressions.
  894. Example matches (foo() + 1)
  895. int foo() { return 1; }
  896. int a = (foo() + 1);
  897. </pre></td></tr>
  898. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('parenListExpr0')"><a name="parenListExpr0Anchor">parenListExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ParenListExpr.html">ParenListExpr</a>&gt;...</td></tr>
  899. <tr><td colspan="4" class="doc" id="parenListExpr0"><pre>Matches paren list expressions.
  900. ParenListExprs don't have a predefined type and are used for late parsing.
  901. In the final AST, they can be met in template declarations.
  902. Given
  903. template&lt;typename T&gt; class X {
  904. void f() {
  905. X x(*this);
  906. int a = 0, b = 1; int i = (a, b);
  907. }
  908. };
  909. parenListExpr() matches "*this" but NOT matches (a, b) because (a, b)
  910. has a predefined type and is a ParenExpr, not a ParenListExpr.
  911. </pre></td></tr>
  912. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('predefinedExpr0')"><a name="predefinedExpr0Anchor">predefinedExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1PredefinedExpr.html">PredefinedExpr</a>&gt;...</td></tr>
  913. <tr><td colspan="4" class="doc" id="predefinedExpr0"><pre>Matches predefined identifier expressions [C99 6.4.2.2].
  914. Example: Matches __func__
  915. printf("%s", __func__);
  916. </pre></td></tr>
  917. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('returnStmt0')"><a name="returnStmt0Anchor">returnStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ReturnStmt.html">ReturnStmt</a>&gt;...</td></tr>
  918. <tr><td colspan="4" class="doc" id="returnStmt0"><pre>Matches return statements.
  919. Given
  920. return 1;
  921. returnStmt()
  922. matches 'return 1'
  923. </pre></td></tr>
  924. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('stmt0')"><a name="stmt0Anchor">stmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;...</td></tr>
  925. <tr><td colspan="4" class="doc" id="stmt0"><pre>Matches statements.
  926. Given
  927. { ++a; }
  928. stmt()
  929. matches both the compound statement '{ ++a; }' and '++a'.
  930. </pre></td></tr>
  931. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('stmtExpr0')"><a name="stmtExpr0Anchor">stmtExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1StmtExpr.html">StmtExpr</a>&gt;...</td></tr>
  932. <tr><td colspan="4" class="doc" id="stmtExpr0"><pre>Matches statement expression (GNU extension).
  933. Example match: ({ int X = 4; X; })
  934. int C = ({ int X = 4; X; });
  935. </pre></td></tr>
  936. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('stringLiteral0')"><a name="stringLiteral0Anchor">stringLiteral</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1StringLiteral.html">StringLiteral</a>&gt;...</td></tr>
  937. <tr><td colspan="4" class="doc" id="stringLiteral0"><pre>Matches string literals (also matches wide string literals).
  938. Example matches "abcd", L"abcd"
  939. char *s = "abcd";
  940. wchar_t *ws = L"abcd";
  941. </pre></td></tr>
  942. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('substNonTypeTemplateParmExpr0')"><a name="substNonTypeTemplateParmExpr0Anchor">substNonTypeTemplateParmExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1SubstNonTypeTemplateParmExpr.html">SubstNonTypeTemplateParmExpr</a>&gt;...</td></tr>
  943. <tr><td colspan="4" class="doc" id="substNonTypeTemplateParmExpr0"><pre>Matches substitutions of non-type template parameters.
  944. Given
  945. template &lt;int N&gt;
  946. struct A { static const int n = N; };
  947. struct B : public A&lt;42&gt; {};
  948. substNonTypeTemplateParmExpr()
  949. matches "N" in the right-hand side of "static const int n = N;"
  950. </pre></td></tr>
  951. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('switchCase0')"><a name="switchCase0Anchor">switchCase</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1SwitchCase.html">SwitchCase</a>&gt;...</td></tr>
  952. <tr><td colspan="4" class="doc" id="switchCase0"><pre>Matches case and default statements inside switch statements.
  953. Given
  954. switch(a) { case 42: break; default: break; }
  955. switchCase()
  956. matches 'case 42: break;' and 'default: break;'.
  957. </pre></td></tr>
  958. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('switchStmt0')"><a name="switchStmt0Anchor">switchStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1SwitchStmt.html">SwitchStmt</a>&gt;...</td></tr>
  959. <tr><td colspan="4" class="doc" id="switchStmt0"><pre>Matches switch statements.
  960. Given
  961. switch(a) { case 42: break; default: break; }
  962. switchStmt()
  963. matches 'switch(a)'.
  964. </pre></td></tr>
  965. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('unaryExprOrTypeTraitExpr0')"><a name="unaryExprOrTypeTraitExpr0Anchor">unaryExprOrTypeTraitExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt;...</td></tr>
  966. <tr><td colspan="4" class="doc" id="unaryExprOrTypeTraitExpr0"><pre>Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL)
  967. Given
  968. Foo x = bar;
  969. int y = sizeof(x) + alignof(x);
  970. unaryExprOrTypeTraitExpr()
  971. matches sizeof(x) and alignof(x)
  972. </pre></td></tr>
  973. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('unaryOperator0')"><a name="unaryOperator0Anchor">unaryOperator</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryOperator.html">UnaryOperator</a>&gt;...</td></tr>
  974. <tr><td colspan="4" class="doc" id="unaryOperator0"><pre>Matches unary operator expressions.
  975. Example matches !a
  976. !a || b
  977. </pre></td></tr>
  978. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('unresolvedLookupExpr0')"><a name="unresolvedLookupExpr0Anchor">unresolvedLookupExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedLookupExpr.html">UnresolvedLookupExpr</a>&gt;...</td></tr>
  979. <tr><td colspan="4" class="doc" id="unresolvedLookupExpr0"><pre>Matches reference to a name that can be looked up during parsing
  980. but could not be resolved to a specific declaration.
  981. Given
  982. template&lt;typename T&gt;
  983. T foo() { T a; return a; }
  984. template&lt;typename T&gt;
  985. void bar() {
  986. foo&lt;T&gt;();
  987. }
  988. unresolvedLookupExpr()
  989. matches foo&lt;T&gt;() </pre></td></tr>
  990. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('userDefinedLiteral0')"><a name="userDefinedLiteral0Anchor">userDefinedLiteral</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UserDefinedLiteral.html">UserDefinedLiteral</a>&gt;...</td></tr>
  991. <tr><td colspan="4" class="doc" id="userDefinedLiteral0"><pre>Matches user defined literal operator call.
  992. Example match: "foo"_suffix
  993. </pre></td></tr>
  994. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('whileStmt0')"><a name="whileStmt0Anchor">whileStmt</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1WhileStmt.html">WhileStmt</a>&gt;...</td></tr>
  995. <tr><td colspan="4" class="doc" id="whileStmt0"><pre>Matches while statements.
  996. Given
  997. while (true) {}
  998. whileStmt()
  999. matches 'while (true) {}'.
  1000. </pre></td></tr>
  1001. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('templateArgument0')"><a name="templateArgument0Anchor">templateArgument</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;...</td></tr>
  1002. <tr><td colspan="4" class="doc" id="templateArgument0"><pre>Matches template arguments.
  1003. Given
  1004. template &lt;typename T&gt; struct C {};
  1005. C&lt;int&gt; c;
  1006. templateArgument()
  1007. matches 'int' in C&lt;int&gt;.
  1008. </pre></td></tr>
  1009. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateName.html">TemplateName</a>&gt;</td><td class="name" onclick="toggle('templateName0')"><a name="templateName0Anchor">templateName</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateName.html">TemplateName</a>&gt;...</td></tr>
  1010. <tr><td colspan="4" class="doc" id="templateName0"><pre>Matches template name.
  1011. Given
  1012. template &lt;typename T&gt; class X { };
  1013. X&lt;int&gt; xi;
  1014. templateName()
  1015. matches 'X' in X&lt;int&gt;.
  1016. </pre></td></tr>
  1017. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td><td class="name" onclick="toggle('typeLoc0')"><a name="typeLoc0Anchor">typeLoc</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;...</td></tr>
  1018. <tr><td colspan="4" class="doc" id="typeLoc0"><pre>Matches TypeLocs in the clang AST.
  1019. </pre></td></tr>
  1020. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('arrayType0')"><a name="arrayType0Anchor">arrayType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;...</td></tr>
  1021. <tr><td colspan="4" class="doc" id="arrayType0"><pre>Matches all kinds of arrays.
  1022. Given
  1023. int a[] = { 2, 3 };
  1024. int b[4];
  1025. void f() { int c[a[0]]; }
  1026. arrayType()
  1027. matches "int a[]", "int b[4]" and "int c[a[0]]";
  1028. </pre></td></tr>
  1029. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('atomicType0')"><a name="atomicType0Anchor">atomicType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicType.html">AtomicType</a>&gt;...</td></tr>
  1030. <tr><td colspan="4" class="doc" id="atomicType0"><pre>Matches atomic types.
  1031. Given
  1032. _Atomic(int) i;
  1033. atomicType()
  1034. matches "_Atomic(int) i"
  1035. </pre></td></tr>
  1036. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('autoType0')"><a name="autoType0Anchor">autoType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AutoType.html">AutoType</a>&gt;...</td></tr>
  1037. <tr><td colspan="4" class="doc" id="autoType0"><pre>Matches types nodes representing C++11 auto types.
  1038. Given:
  1039. auto n = 4;
  1040. int v[] = { 2, 3 }
  1041. for (auto i : v) { }
  1042. autoType()
  1043. matches "auto n" and "auto i"
  1044. </pre></td></tr>
  1045. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('blockPointerType0')"><a name="blockPointerType0Anchor">blockPointerType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;...</td></tr>
  1046. <tr><td colspan="4" class="doc" id="blockPointerType0"><pre>Matches block pointer types, i.e. types syntactically represented as
  1047. "void (^)(int)".
  1048. The pointee is always required to be a FunctionType.
  1049. </pre></td></tr>
  1050. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('builtinType0')"><a name="builtinType0Anchor">builtinType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BuiltinType.html">BuiltinType</a>&gt;...</td></tr>
  1051. <tr><td colspan="4" class="doc" id="builtinType0"><pre>Matches builtin Types.
  1052. Given
  1053. struct A {};
  1054. A a;
  1055. int b;
  1056. float c;
  1057. bool d;
  1058. builtinType()
  1059. matches "int b", "float c" and "bool d"
  1060. </pre></td></tr>
  1061. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('complexType0')"><a name="complexType0Anchor">complexType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;...</td></tr>
  1062. <tr><td colspan="4" class="doc" id="complexType0"><pre>Matches C99 complex types.
  1063. Given
  1064. _Complex float f;
  1065. complexType()
  1066. matches "_Complex float f"
  1067. </pre></td></tr>
  1068. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('constantArrayType0')"><a name="constantArrayType0Anchor">constantArrayType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ConstantArrayType.html">ConstantArrayType</a>&gt;...</td></tr>
  1069. <tr><td colspan="4" class="doc" id="constantArrayType0"><pre>Matches C arrays with a specified constant size.
  1070. Given
  1071. void() {
  1072. int a[2];
  1073. int b[] = { 2, 3 };
  1074. int c[b[0]];
  1075. }
  1076. constantArrayType()
  1077. matches "int a[2]"
  1078. </pre></td></tr>
  1079. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('decayedType0')"><a name="decayedType0Anchor">decayedType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DecayedType.html">DecayedType</a>&gt;...</td></tr>
  1080. <tr><td colspan="4" class="doc" id="decayedType0"><pre>Matches decayed type
  1081. Example matches i[] in declaration of f.
  1082. (matcher = valueDecl(hasType(decayedType(hasDecayedType(pointerType())))))
  1083. Example matches i[1].
  1084. (matcher = expr(hasType(decayedType(hasDecayedType(pointerType())))))
  1085. void f(int i[]) {
  1086. i[1] = 0;
  1087. }
  1088. </pre></td></tr>
  1089. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('dependentSizedArrayType0')"><a name="dependentSizedArrayType0Anchor">dependentSizedArrayType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DependentSizedArrayType.html">DependentSizedArrayType</a>&gt;...</td></tr>
  1090. <tr><td colspan="4" class="doc" id="dependentSizedArrayType0"><pre>Matches C++ arrays whose size is a value-dependent expression.
  1091. Given
  1092. template&lt;typename T, int Size&gt;
  1093. class array {
  1094. T data[Size];
  1095. };
  1096. dependentSizedArrayType
  1097. matches "T data[Size]"
  1098. </pre></td></tr>
  1099. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('elaboratedType0')"><a name="elaboratedType0Anchor">elaboratedType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ElaboratedType.html">ElaboratedType</a>&gt;...</td></tr>
  1100. <tr><td colspan="4" class="doc" id="elaboratedType0"><pre>Matches types specified with an elaborated type keyword or with a
  1101. qualified name.
  1102. Given
  1103. namespace N {
  1104. namespace M {
  1105. class D {};
  1106. }
  1107. }
  1108. class C {};
  1109. class C c;
  1110. N::M::D d;
  1111. elaboratedType() matches the type of the variable declarations of both
  1112. c and d.
  1113. </pre></td></tr>
  1114. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('enumType0')"><a name="enumType0Anchor">enumType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;...</td></tr>
  1115. <tr><td colspan="4" class="doc" id="enumType0"><pre>Matches enum types.
  1116. Given
  1117. enum C { Green };
  1118. enum class S { Red };
  1119. C c;
  1120. S s;
  1121. enumType() matches the type of the variable declarations of both c and
  1122. s.
  1123. </pre></td></tr>
  1124. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('functionProtoType0')"><a name="functionProtoType0Anchor">functionProtoType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionProtoType.html">FunctionProtoType</a>&gt;...</td></tr>
  1125. <tr><td colspan="4" class="doc" id="functionProtoType0"><pre>Matches FunctionProtoType nodes.
  1126. Given
  1127. int (*f)(int);
  1128. void g();
  1129. functionProtoType()
  1130. matches "int (*f)(int)" and the type of "g" in C++ mode.
  1131. In C mode, "g" is not matched because it does not contain a prototype.
  1132. </pre></td></tr>
  1133. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('functionType0')"><a name="functionType0Anchor">functionType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionType.html">FunctionType</a>&gt;...</td></tr>
  1134. <tr><td colspan="4" class="doc" id="functionType0"><pre>Matches FunctionType nodes.
  1135. Given
  1136. int (*f)(int);
  1137. void g();
  1138. functionType()
  1139. matches "int (*f)(int)" and the type of "g".
  1140. </pre></td></tr>
  1141. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('incompleteArrayType0')"><a name="incompleteArrayType0Anchor">incompleteArrayType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IncompleteArrayType.html">IncompleteArrayType</a>&gt;...</td></tr>
  1142. <tr><td colspan="4" class="doc" id="incompleteArrayType0"><pre>Matches C arrays with unspecified size.
  1143. Given
  1144. int a[] = { 2, 3 };
  1145. int b[42];
  1146. void f(int c[]) { int d[a[0]]; };
  1147. incompleteArrayType()
  1148. matches "int a[]" and "int c[]"
  1149. </pre></td></tr>
  1150. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('injectedClassNameType0')"><a name="injectedClassNameType0Anchor">injectedClassNameType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;...</td></tr>
  1151. <tr><td colspan="4" class="doc" id="injectedClassNameType0"><pre>Matches injected class name types.
  1152. Example matches S s, but not S&lt;T&gt; s.
  1153. (matcher = parmVarDecl(hasType(injectedClassNameType())))
  1154. template &lt;typename T&gt; struct S {
  1155. void f(S s);
  1156. void g(S&lt;T&gt; s);
  1157. };
  1158. </pre></td></tr>
  1159. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('lValueReferenceType0')"><a name="lValueReferenceType0Anchor">lValueReferenceType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LValueReferenceType.html">LValueReferenceType</a>&gt;...</td></tr>
  1160. <tr><td colspan="4" class="doc" id="lValueReferenceType0"><pre>Matches lvalue reference types.
  1161. Given:
  1162. int *a;
  1163. int &amp;b = *a;
  1164. int &amp;&amp;c = 1;
  1165. auto &amp;d = b;
  1166. auto &amp;&amp;e = c;
  1167. auto &amp;&amp;f = 2;
  1168. int g = 5;
  1169. lValueReferenceType() matches the types of b, d, and e. e is
  1170. matched since the type is deduced as int&amp; by reference collapsing rules.
  1171. </pre></td></tr>
  1172. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('memberPointerType0')"><a name="memberPointerType0Anchor">memberPointerType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;...</td></tr>
  1173. <tr><td colspan="4" class="doc" id="memberPointerType0"><pre>Matches member pointer types.
  1174. Given
  1175. struct A { int i; }
  1176. A::* ptr = A::i;
  1177. memberPointerType()
  1178. matches "A::* ptr"
  1179. </pre></td></tr>
  1180. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('objcObjectPointerType0')"><a name="objcObjectPointerType0Anchor">objcObjectPointerType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCObjectPointerType.html">ObjCObjectPointerType</a>&gt;...</td></tr>
  1181. <tr><td colspan="4" class="doc" id="objcObjectPointerType0"><pre>Matches an Objective-C object pointer type, which is different from
  1182. a pointer type, despite being syntactically similar.
  1183. Given
  1184. int *a;
  1185. @interface Foo
  1186. @end
  1187. Foo *f;
  1188. pointerType()
  1189. matches "Foo *f", but does not match "int *a".
  1190. </pre></td></tr>
  1191. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('parenType0')"><a name="parenType0Anchor">parenType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ParenType.html">ParenType</a>&gt;...</td></tr>
  1192. <tr><td colspan="4" class="doc" id="parenType0"><pre>Matches ParenType nodes.
  1193. Given
  1194. int (*ptr_to_array)[4];
  1195. int *array_of_ptrs[4];
  1196. varDecl(hasType(pointsTo(parenType()))) matches ptr_to_array but not
  1197. array_of_ptrs.
  1198. </pre></td></tr>
  1199. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('pointerType0')"><a name="pointerType0Anchor">pointerType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;...</td></tr>
  1200. <tr><td colspan="4" class="doc" id="pointerType0"><pre>Matches pointer types, but does not match Objective-C object pointer
  1201. types.
  1202. Given
  1203. int *a;
  1204. int &amp;b = *a;
  1205. int c = 5;
  1206. @interface Foo
  1207. @end
  1208. Foo *f;
  1209. pointerType()
  1210. matches "int *a", but does not match "Foo *f".
  1211. </pre></td></tr>
  1212. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('rValueReferenceType0')"><a name="rValueReferenceType0Anchor">rValueReferenceType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RValueReferenceType.html">RValueReferenceType</a>&gt;...</td></tr>
  1213. <tr><td colspan="4" class="doc" id="rValueReferenceType0"><pre>Matches rvalue reference types.
  1214. Given:
  1215. int *a;
  1216. int &amp;b = *a;
  1217. int &amp;&amp;c = 1;
  1218. auto &amp;d = b;
  1219. auto &amp;&amp;e = c;
  1220. auto &amp;&amp;f = 2;
  1221. int g = 5;
  1222. rValueReferenceType() matches the types of c and f. e is not
  1223. matched as it is deduced to int&amp; by reference collapsing rules.
  1224. </pre></td></tr>
  1225. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('recordType0')"><a name="recordType0Anchor">recordType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;...</td></tr>
  1226. <tr><td colspan="4" class="doc" id="recordType0"><pre>Matches record types (e.g. structs, classes).
  1227. Given
  1228. class C {};
  1229. struct S {};
  1230. C c;
  1231. S s;
  1232. recordType() matches the type of the variable declarations of both c
  1233. and s.
  1234. </pre></td></tr>
  1235. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('referenceType0')"><a name="referenceType0Anchor">referenceType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;...</td></tr>
  1236. <tr><td colspan="4" class="doc" id="referenceType0"><pre>Matches both lvalue and rvalue reference types.
  1237. Given
  1238. int *a;
  1239. int &amp;b = *a;
  1240. int &amp;&amp;c = 1;
  1241. auto &amp;d = b;
  1242. auto &amp;&amp;e = c;
  1243. auto &amp;&amp;f = 2;
  1244. int g = 5;
  1245. referenceType() matches the types of b, c, d, e, and f.
  1246. </pre></td></tr>
  1247. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('substTemplateTypeParmType0')"><a name="substTemplateTypeParmType0Anchor">substTemplateTypeParmType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1SubstTemplateTypeParmType.html">SubstTemplateTypeParmType</a>&gt;...</td></tr>
  1248. <tr><td colspan="4" class="doc" id="substTemplateTypeParmType0"><pre>Matches types that represent the result of substituting a type for a
  1249. template type parameter.
  1250. Given
  1251. template &lt;typename T&gt;
  1252. void F(T t) {
  1253. int i = 1 + t;
  1254. }
  1255. substTemplateTypeParmType() matches the type of 't' but not '1'
  1256. </pre></td></tr>
  1257. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('tagType0')"><a name="tagType0Anchor">tagType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;...</td></tr>
  1258. <tr><td colspan="4" class="doc" id="tagType0"><pre>Matches tag types (record and enum types).
  1259. Given
  1260. enum E {};
  1261. class C {};
  1262. E e;
  1263. C c;
  1264. tagType() matches the type of the variable declarations of both e
  1265. and c.
  1266. </pre></td></tr>
  1267. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('templateSpecializationType0')"><a name="templateSpecializationType0Anchor">templateSpecializationType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;...</td></tr>
  1268. <tr><td colspan="4" class="doc" id="templateSpecializationType0"><pre>Matches template specialization types.
  1269. Given
  1270. template &lt;typename T&gt;
  1271. class C { };
  1272. template class C&lt;int&gt;; A
  1273. C&lt;char&gt; var; B
  1274. templateSpecializationType() matches the type of the explicit
  1275. instantiation in A and the type of the variable declaration in B.
  1276. </pre></td></tr>
  1277. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('templateTypeParmType0')"><a name="templateTypeParmType0Anchor">templateTypeParmType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;...</td></tr>
  1278. <tr><td colspan="4" class="doc" id="templateTypeParmType0"><pre>Matches template type parameter types.
  1279. Example matches T, but not int.
  1280. (matcher = templateTypeParmType())
  1281. template &lt;typename T&gt; void f(int i);
  1282. </pre></td></tr>
  1283. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('type0')"><a name="type0Anchor">type</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;...</td></tr>
  1284. <tr><td colspan="4" class="doc" id="type0"><pre>Matches Types in the clang AST.
  1285. </pre></td></tr>
  1286. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('typedefType0')"><a name="typedefType0Anchor">typedefType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;...</td></tr>
  1287. <tr><td colspan="4" class="doc" id="typedefType0"><pre>Matches typedef types.
  1288. Given
  1289. typedef int X;
  1290. typedefType()
  1291. matches "typedef int X"
  1292. </pre></td></tr>
  1293. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('unaryTransformType0')"><a name="unaryTransformType0Anchor">unaryTransformType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryTransformType.html">UnaryTransformType</a>&gt;...</td></tr>
  1294. <tr><td colspan="4" class="doc" id="unaryTransformType0"><pre>Matches types nodes representing unary type transformations.
  1295. Given:
  1296. typedef __underlying_type(T) type;
  1297. unaryTransformType()
  1298. matches "__underlying_type(T)"
  1299. </pre></td></tr>
  1300. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('variableArrayType0')"><a name="variableArrayType0Anchor">variableArrayType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VariableArrayType.html">VariableArrayType</a>&gt;...</td></tr>
  1301. <tr><td colspan="4" class="doc" id="variableArrayType0"><pre>Matches C arrays with a specified size that is not an
  1302. integer-constant-expression.
  1303. Given
  1304. void f() {
  1305. int a[] = { 2, 3 }
  1306. int b[42];
  1307. int c[a[0]];
  1308. }
  1309. variableArrayType()
  1310. matches "int c[a[0]]"
  1311. </pre></td></tr>
  1312. <!--END_DECL_MATCHERS -->
  1313. </table>
  1314. <!-- ======================================================================= -->
  1315. <h2 id="narrowing-matchers">Narrowing Matchers</h2>
  1316. <!-- ======================================================================= -->
  1317. <p>Narrowing matchers match certain attributes on the current node, thus
  1318. narrowing down the set of nodes of the current type to match on.</p>
  1319. <p>There are special logical narrowing matchers (allOf, anyOf, anything and unless)
  1320. which allow users to create more powerful match expressions.</p>
  1321. <table>
  1322. <tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
  1323. <!-- START_NARROWING_MATCHERS -->
  1324. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('allOf0')"><a name="allOf0Anchor">allOf</a></td><td>Matcher&lt;*&gt;, ..., Matcher&lt;*&gt;</td></tr>
  1325. <tr><td colspan="4" class="doc" id="allOf0"><pre>Matches if all given matchers match.
  1326. Usable as: Any Matcher
  1327. </pre></td></tr>
  1328. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('anyOf0')"><a name="anyOf0Anchor">anyOf</a></td><td>Matcher&lt;*&gt;, ..., Matcher&lt;*&gt;</td></tr>
  1329. <tr><td colspan="4" class="doc" id="anyOf0"><pre>Matches if any of the given matchers matches.
  1330. Usable as: Any Matcher
  1331. </pre></td></tr>
  1332. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('anything0')"><a name="anything0Anchor">anything</a></td><td></td></tr>
  1333. <tr><td colspan="4" class="doc" id="anything0"><pre>Matches any node.
  1334. Useful when another matcher requires a child matcher, but there's no
  1335. additional constraint. This will often be used with an explicit conversion
  1336. to an internal::Matcher&lt;&gt; type such as TypeMatcher.
  1337. Example: DeclarationMatcher(anything()) matches all declarations, e.g.,
  1338. "int* p" and "void f()" in
  1339. int* p;
  1340. void f();
  1341. Usable as: Any Matcher
  1342. </pre></td></tr>
  1343. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('unless0')"><a name="unless0Anchor">unless</a></td><td>Matcher&lt;*&gt;</td></tr>
  1344. <tr><td colspan="4" class="doc" id="unless0"><pre>Matches if the provided matcher does not match.
  1345. Example matches Y (matcher = cxxRecordDecl(unless(hasName("X"))))
  1346. class X {};
  1347. class Y {};
  1348. Usable as: Any Matcher
  1349. </pre></td></tr>
  1350. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasOperatorName0')"><a name="hasOperatorName0Anchor">hasOperatorName</a></td><td>std::string Name</td></tr>
  1351. <tr><td colspan="4" class="doc" id="hasOperatorName0"><pre>Matches the operator Name of operator expressions (binary or
  1352. unary).
  1353. Example matches a || b (matcher = binaryOperator(hasOperatorName("||")))
  1354. !(a || b)
  1355. </pre></td></tr>
  1356. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXBoolLiteralExpr.html">CXXBoolLiteralExpr</a>&gt;</td><td class="name" onclick="toggle('equals2')"><a name="equals2Anchor">equals</a></td><td>ValueT Value</td></tr>
  1357. <tr><td colspan="4" class="doc" id="equals2"><pre>Matches literals that are equal to the given value of type ValueT.
  1358. Given
  1359. f('false, 3.14, 42);
  1360. characterLiteral(equals(0))
  1361. matches 'cxxBoolLiteral(equals(false)) and cxxBoolLiteral(equals(0))
  1362. match false
  1363. floatLiteral(equals(3.14)) and floatLiteral(equals(314e-2))
  1364. match 3.14
  1365. integerLiteral(equals(42))
  1366. matches 42
  1367. Note that you cannot directly match a negative numeric literal because the
  1368. minus sign is not part of the literal: It is a unary operator whose operand
  1369. is the positive numeric literal. Instead, you must use a unaryOperator()
  1370. matcher to match the minus sign:
  1371. unaryOperator(hasOperatorName("-"),
  1372. hasUnaryOperand(integerLiteral(equals(13))))
  1373. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXBoolLiteralExpr.html">CXXBoolLiteralExpr</a>&gt;,
  1374. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;
  1375. </pre></td></tr>
  1376. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXBoolLiteralExpr.html">CXXBoolLiteralExpr</a>&gt;</td><td class="name" onclick="toggle('equals5')"><a name="equals5Anchor">equals</a></td><td>bool Value</td></tr>
  1377. <tr><td colspan="4" class="doc" id="equals5"><pre></pre></td></tr>
  1378. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXBoolLiteralExpr.html">CXXBoolLiteralExpr</a>&gt;</td><td class="name" onclick="toggle('equals11')"><a name="equals11Anchor">equals</a></td><td>double Value</td></tr>
  1379. <tr><td colspan="4" class="doc" id="equals11"><pre></pre></td></tr>
  1380. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXBoolLiteralExpr.html">CXXBoolLiteralExpr</a>&gt;</td><td class="name" onclick="toggle('equals8')"><a name="equals8Anchor">equals</a></td><td>unsigned Value</td></tr>
  1381. <tr><td colspan="4" class="doc" id="equals8"><pre></pre></td></tr>
  1382. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCatchStmt.html">CXXCatchStmt</a>&gt;</td><td class="name" onclick="toggle('isCatchAll0')"><a name="isCatchAll0Anchor">isCatchAll</a></td><td></td></tr>
  1383. <tr><td colspan="4" class="doc" id="isCatchAll0"><pre>Matches a C++ catch statement that has a catch-all handler.
  1384. Given
  1385. try {
  1386. ...
  1387. } catch (int) {
  1388. ...
  1389. } catch (...) {
  1390. ...
  1391. }
  1392. endcode
  1393. cxxCatchStmt(isCatchAll()) matches catch(...) but not catch(int).
  1394. </pre></td></tr>
  1395. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('argumentCountIs1')"><a name="argumentCountIs1Anchor">argumentCountIs</a></td><td>unsigned N</td></tr>
  1396. <tr><td colspan="4" class="doc" id="argumentCountIs1"><pre>Checks that a call expression or a constructor call expression has
  1397. a specific number of arguments (including absent default arguments).
  1398. Example matches f(0, 0) (matcher = callExpr(argumentCountIs(2)))
  1399. void f(int x, int y);
  1400. f(0, 0);
  1401. </pre></td></tr>
  1402. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('isListInitialization0')"><a name="isListInitialization0Anchor">isListInitialization</a></td><td></td></tr>
  1403. <tr><td colspan="4" class="doc" id="isListInitialization0"><pre>Matches a constructor call expression which uses list initialization.
  1404. </pre></td></tr>
  1405. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('requiresZeroInitialization0')"><a name="requiresZeroInitialization0Anchor">requiresZeroInitialization</a></td><td></td></tr>
  1406. <tr><td colspan="4" class="doc" id="requiresZeroInitialization0"><pre>Matches a constructor call expression which requires
  1407. zero initialization.
  1408. Given
  1409. void foo() {
  1410. struct point { double x; double y; };
  1411. point pt[2] = { { 1.0, 2.0 } };
  1412. }
  1413. initListExpr(has(cxxConstructExpr(requiresZeroInitialization()))
  1414. will match the implicit array filler for pt[1].
  1415. </pre></td></tr>
  1416. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>&gt;</td><td class="name" onclick="toggle('isCopyConstructor0')"><a name="isCopyConstructor0Anchor">isCopyConstructor</a></td><td></td></tr>
  1417. <tr><td colspan="4" class="doc" id="isCopyConstructor0"><pre>Matches constructor declarations that are copy constructors.
  1418. Given
  1419. struct S {
  1420. S(); #1
  1421. S(const S &amp;); #2
  1422. S(S &amp;&amp;); #3
  1423. };
  1424. cxxConstructorDecl(isCopyConstructor()) will match #2, but not #1 or #3.
  1425. </pre></td></tr>
  1426. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>&gt;</td><td class="name" onclick="toggle('isDefaultConstructor0')"><a name="isDefaultConstructor0Anchor">isDefaultConstructor</a></td><td></td></tr>
  1427. <tr><td colspan="4" class="doc" id="isDefaultConstructor0"><pre>Matches constructor declarations that are default constructors.
  1428. Given
  1429. struct S {
  1430. S(); #1
  1431. S(const S &amp;); #2
  1432. S(S &amp;&amp;); #3
  1433. };
  1434. cxxConstructorDecl(isDefaultConstructor()) will match #1, but not #2 or #3.
  1435. </pre></td></tr>
  1436. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>&gt;</td><td class="name" onclick="toggle('isDelegatingConstructor0')"><a name="isDelegatingConstructor0Anchor">isDelegatingConstructor</a></td><td></td></tr>
  1437. <tr><td colspan="4" class="doc" id="isDelegatingConstructor0"><pre>Matches constructors that delegate to another constructor.
  1438. Given
  1439. struct S {
  1440. S(); #1
  1441. S(int) {} #2
  1442. S(S &amp;&amp;) : S() {} #3
  1443. };
  1444. S::S() : S(0) {} #4
  1445. cxxConstructorDecl(isDelegatingConstructor()) will match #3 and #4, but not
  1446. #1 or #2.
  1447. </pre></td></tr>
  1448. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>&gt;</td><td class="name" onclick="toggle('isExplicit0')"><a name="isExplicit0Anchor">isExplicit</a></td><td></td></tr>
  1449. <tr><td colspan="4" class="doc" id="isExplicit0"><pre>Matches constructor and conversion declarations that are marked with
  1450. the explicit keyword.
  1451. Given
  1452. struct S {
  1453. S(int); #1
  1454. explicit S(double); #2
  1455. operator int(); #3
  1456. explicit operator bool(); #4
  1457. };
  1458. cxxConstructorDecl(isExplicit()) will match #2, but not #1.
  1459. cxxConversionDecl(isExplicit()) will match #4, but not #3.
  1460. </pre></td></tr>
  1461. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>&gt;</td><td class="name" onclick="toggle('isMoveConstructor0')"><a name="isMoveConstructor0Anchor">isMoveConstructor</a></td><td></td></tr>
  1462. <tr><td colspan="4" class="doc" id="isMoveConstructor0"><pre>Matches constructor declarations that are move constructors.
  1463. Given
  1464. struct S {
  1465. S(); #1
  1466. S(const S &amp;); #2
  1467. S(S &amp;&amp;); #3
  1468. };
  1469. cxxConstructorDecl(isMoveConstructor()) will match #3, but not #1 or #2.
  1470. </pre></td></tr>
  1471. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConversionDecl.html">CXXConversionDecl</a>&gt;</td><td class="name" onclick="toggle('isExplicit1')"><a name="isExplicit1Anchor">isExplicit</a></td><td></td></tr>
  1472. <tr><td colspan="4" class="doc" id="isExplicit1"><pre>Matches constructor and conversion declarations that are marked with
  1473. the explicit keyword.
  1474. Given
  1475. struct S {
  1476. S(int); #1
  1477. explicit S(double); #2
  1478. operator int(); #3
  1479. explicit operator bool(); #4
  1480. };
  1481. cxxConstructorDecl(isExplicit()) will match #2, but not #1.
  1482. cxxConversionDecl(isExplicit()) will match #4, but not #3.
  1483. </pre></td></tr>
  1484. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;</td><td class="name" onclick="toggle('isBaseInitializer0')"><a name="isBaseInitializer0Anchor">isBaseInitializer</a></td><td></td></tr>
  1485. <tr><td colspan="4" class="doc" id="isBaseInitializer0"><pre>Matches a constructor initializer if it is initializing a base, as
  1486. opposed to a member.
  1487. Given
  1488. struct B {};
  1489. struct D : B {
  1490. int I;
  1491. D(int i) : I(i) {}
  1492. };
  1493. struct E : B {
  1494. E() : B() {}
  1495. };
  1496. cxxConstructorDecl(hasAnyConstructorInitializer(isBaseInitializer()))
  1497. will match E(), but not match D(int).
  1498. </pre></td></tr>
  1499. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;</td><td class="name" onclick="toggle('isMemberInitializer0')"><a name="isMemberInitializer0Anchor">isMemberInitializer</a></td><td></td></tr>
  1500. <tr><td colspan="4" class="doc" id="isMemberInitializer0"><pre>Matches a constructor initializer if it is initializing a member, as
  1501. opposed to a base.
  1502. Given
  1503. struct B {};
  1504. struct D : B {
  1505. int I;
  1506. D(int i) : I(i) {}
  1507. };
  1508. struct E : B {
  1509. E() : B() {}
  1510. };
  1511. cxxConstructorDecl(hasAnyConstructorInitializer(isMemberInitializer()))
  1512. will match D(int), but not match E().
  1513. </pre></td></tr>
  1514. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;</td><td class="name" onclick="toggle('isWritten0')"><a name="isWritten0Anchor">isWritten</a></td><td></td></tr>
  1515. <tr><td colspan="4" class="doc" id="isWritten0"><pre>Matches a constructor initializer if it is explicitly written in
  1516. code (as opposed to implicitly added by the compiler).
  1517. Given
  1518. struct Foo {
  1519. Foo() { }
  1520. Foo(int) : foo_("A") { }
  1521. string foo_;
  1522. };
  1523. cxxConstructorDecl(hasAnyConstructorInitializer(isWritten()))
  1524. will match Foo(int), but not Foo()
  1525. </pre></td></tr>
  1526. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isConst0')"><a name="isConst0Anchor">isConst</a></td><td></td></tr>
  1527. <tr><td colspan="4" class="doc" id="isConst0"><pre>Matches if the given method declaration is const.
  1528. Given
  1529. struct A {
  1530. void foo() const;
  1531. void bar();
  1532. };
  1533. cxxMethodDecl(isConst()) matches A::foo() but not A::bar()
  1534. </pre></td></tr>
  1535. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isCopyAssignmentOperator0')"><a name="isCopyAssignmentOperator0Anchor">isCopyAssignmentOperator</a></td><td></td></tr>
  1536. <tr><td colspan="4" class="doc" id="isCopyAssignmentOperator0"><pre>Matches if the given method declaration declares a copy assignment
  1537. operator.
  1538. Given
  1539. struct A {
  1540. A &amp;operator=(const A &amp;);
  1541. A &amp;operator=(A &amp;&amp;);
  1542. };
  1543. cxxMethodDecl(isCopyAssignmentOperator()) matches the first method but not
  1544. the second one.
  1545. </pre></td></tr>
  1546. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isFinal1')"><a name="isFinal1Anchor">isFinal</a></td><td></td></tr>
  1547. <tr><td colspan="4" class="doc" id="isFinal1"><pre>Matches if the given method or class declaration is final.
  1548. Given:
  1549. class A final {};
  1550. struct B {
  1551. virtual void f();
  1552. };
  1553. struct C : B {
  1554. void f() final;
  1555. };
  1556. matches A and C::f, but not B, C, or B::f
  1557. </pre></td></tr>
  1558. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isMoveAssignmentOperator0')"><a name="isMoveAssignmentOperator0Anchor">isMoveAssignmentOperator</a></td><td></td></tr>
  1559. <tr><td colspan="4" class="doc" id="isMoveAssignmentOperator0"><pre>Matches if the given method declaration declares a move assignment
  1560. operator.
  1561. Given
  1562. struct A {
  1563. A &amp;operator=(const A &amp;);
  1564. A &amp;operator=(A &amp;&amp;);
  1565. };
  1566. cxxMethodDecl(isMoveAssignmentOperator()) matches the second method but not
  1567. the first one.
  1568. </pre></td></tr>
  1569. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isOverride0')"><a name="isOverride0Anchor">isOverride</a></td><td></td></tr>
  1570. <tr><td colspan="4" class="doc" id="isOverride0"><pre>Matches if the given method declaration overrides another method.
  1571. Given
  1572. class A {
  1573. public:
  1574. virtual void x();
  1575. };
  1576. class B : public A {
  1577. public:
  1578. virtual void x();
  1579. };
  1580. matches B::x
  1581. </pre></td></tr>
  1582. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isPure0')"><a name="isPure0Anchor">isPure</a></td><td></td></tr>
  1583. <tr><td colspan="4" class="doc" id="isPure0"><pre>Matches if the given method declaration is pure.
  1584. Given
  1585. class A {
  1586. public:
  1587. virtual void x() = 0;
  1588. };
  1589. matches A::x
  1590. </pre></td></tr>
  1591. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isUserProvided0')"><a name="isUserProvided0Anchor">isUserProvided</a></td><td></td></tr>
  1592. <tr><td colspan="4" class="doc" id="isUserProvided0"><pre>Matches method declarations that are user-provided.
  1593. Given
  1594. struct S {
  1595. S(); #1
  1596. S(const S &amp;) = default; #2
  1597. S(S &amp;&amp;) = delete; #3
  1598. };
  1599. cxxConstructorDecl(isUserProvided()) will match #1, but not #2 or #3.
  1600. </pre></td></tr>
  1601. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isVirtual0')"><a name="isVirtual0Anchor">isVirtual</a></td><td></td></tr>
  1602. <tr><td colspan="4" class="doc" id="isVirtual0"><pre>Matches if the given method declaration is virtual.
  1603. Given
  1604. class A {
  1605. public:
  1606. virtual void x();
  1607. };
  1608. matches A::x
  1609. </pre></td></tr>
  1610. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isVirtualAsWritten0')"><a name="isVirtualAsWritten0Anchor">isVirtualAsWritten</a></td><td></td></tr>
  1611. <tr><td colspan="4" class="doc" id="isVirtualAsWritten0"><pre>Matches if the given method declaration has an explicit "virtual".
  1612. Given
  1613. class A {
  1614. public:
  1615. virtual void x();
  1616. };
  1617. class B : public A {
  1618. public:
  1619. void x();
  1620. };
  1621. matches A::x but not B::x
  1622. </pre></td></tr>
  1623. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXOperatorCallExpr.html">CXXOperatorCallExpr</a>&gt;</td><td class="name" onclick="toggle('hasOverloadedOperatorName1')"><a name="hasOverloadedOperatorName1Anchor">hasOverloadedOperatorName</a></td><td>StringRef Name</td></tr>
  1624. <tr><td colspan="4" class="doc" id="hasOverloadedOperatorName1"><pre>Matches overloaded operator names.
  1625. Matches overloaded operator names specified in strings without the
  1626. "operator" prefix: e.g. "&lt;&lt;".
  1627. Given:
  1628. class A { int operator*(); };
  1629. const A &amp;operator&lt;&lt;(const A &amp;a, const A &amp;b);
  1630. A a;
  1631. a &lt;&lt; a; &lt;-- This matches
  1632. cxxOperatorCallExpr(hasOverloadedOperatorName("&lt;&lt;"))) matches the
  1633. specified line and
  1634. cxxRecordDecl(hasMethod(hasOverloadedOperatorName("*")))
  1635. matches the declaration of A.
  1636. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXOperatorCallExpr.html">CXXOperatorCallExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;
  1637. </pre></td></tr>
  1638. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isDerivedFrom1')"><a name="isDerivedFrom1Anchor">isDerivedFrom</a></td><td>std::string BaseName</td></tr>
  1639. <tr><td colspan="4" class="doc" id="isDerivedFrom1"><pre>Overloaded method as shortcut for isDerivedFrom(hasName(...)).
  1640. </pre></td></tr>
  1641. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isExplicitTemplateSpecialization2')"><a name="isExplicitTemplateSpecialization2Anchor">isExplicitTemplateSpecialization</a></td><td></td></tr>
  1642. <tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization2"><pre>Matches explicit template specializations of function, class, or
  1643. static member variable template instantiations.
  1644. Given
  1645. template&lt;typename T&gt; void A(T t) { }
  1646. template&lt;&gt; void A(int N) { }
  1647. functionDecl(isExplicitTemplateSpecialization())
  1648. matches the specialization A&lt;int&gt;().
  1649. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
  1650. </pre></td></tr>
  1651. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isFinal0')"><a name="isFinal0Anchor">isFinal</a></td><td></td></tr>
  1652. <tr><td colspan="4" class="doc" id="isFinal0"><pre>Matches if the given method or class declaration is final.
  1653. Given:
  1654. class A final {};
  1655. struct B {
  1656. virtual void f();
  1657. };
  1658. struct C : B {
  1659. void f() final;
  1660. };
  1661. matches A and C::f, but not B, C, or B::f
  1662. </pre></td></tr>
  1663. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isLambda0')"><a name="isLambda0Anchor">isLambda</a></td><td></td></tr>
  1664. <tr><td colspan="4" class="doc" id="isLambda0"><pre>Matches the generated class of lambda expressions.
  1665. Given:
  1666. auto x = []{};
  1667. cxxRecordDecl(isLambda()) matches the implicit class declaration of
  1668. decltype(x)
  1669. </pre></td></tr>
  1670. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isSameOrDerivedFrom1')"><a name="isSameOrDerivedFrom1Anchor">isSameOrDerivedFrom</a></td><td>std::string BaseName</td></tr>
  1671. <tr><td colspan="4" class="doc" id="isSameOrDerivedFrom1"><pre>Overloaded method as shortcut for
  1672. isSameOrDerivedFrom(hasName(...)).
  1673. </pre></td></tr>
  1674. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isTemplateInstantiation2')"><a name="isTemplateInstantiation2Anchor">isTemplateInstantiation</a></td><td></td></tr>
  1675. <tr><td colspan="4" class="doc" id="isTemplateInstantiation2"><pre>Matches template instantiations of function, class, or static
  1676. member variable template instantiations.
  1677. Given
  1678. template &lt;typename T&gt; class X {}; class A {}; X&lt;A&gt; x;
  1679. or
  1680. template &lt;typename T&gt; class X {}; class A {}; template class X&lt;A&gt;;
  1681. cxxRecordDecl(hasName("::X"), isTemplateInstantiation())
  1682. matches the template instantiation of X&lt;A&gt;.
  1683. But given
  1684. template &lt;typename T&gt; class X {}; class A {};
  1685. template &lt;&gt; class X&lt;A&gt; {}; X&lt;A&gt; x;
  1686. cxxRecordDecl(hasName("::X"), isTemplateInstantiation())
  1687. does not match, as X&lt;A&gt; is an explicit template specialization.
  1688. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
  1689. </pre></td></tr>
  1690. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('argumentCountIs0')"><a name="argumentCountIs0Anchor">argumentCountIs</a></td><td>unsigned N</td></tr>
  1691. <tr><td colspan="4" class="doc" id="argumentCountIs0"><pre>Checks that a call expression or a constructor call expression has
  1692. a specific number of arguments (including absent default arguments).
  1693. Example matches f(0, 0) (matcher = callExpr(argumentCountIs(2)))
  1694. void f(int x, int y);
  1695. f(0, 0);
  1696. </pre></td></tr>
  1697. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CastExpr.html">CastExpr</a>&gt;</td><td class="name" onclick="toggle('hasCastKind0')"><a name="hasCastKind0Anchor">hasCastKind</a></td><td>CastKind Kind</td></tr>
  1698. <tr><td colspan="4" class="doc" id="hasCastKind0"><pre>Matches casts that has a given cast kind.
  1699. Example: matches the implicit cast around 0
  1700. (matcher = castExpr(hasCastKind(CK_NullToPointer)))
  1701. int *p = 0;
  1702. </pre></td></tr>
  1703. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;</td><td class="name" onclick="toggle('equals3')"><a name="equals3Anchor">equals</a></td><td>ValueT Value</td></tr>
  1704. <tr><td colspan="4" class="doc" id="equals3"><pre>Matches literals that are equal to the given value of type ValueT.
  1705. Given
  1706. f('false, 3.14, 42);
  1707. characterLiteral(equals(0))
  1708. matches 'cxxBoolLiteral(equals(false)) and cxxBoolLiteral(equals(0))
  1709. match false
  1710. floatLiteral(equals(3.14)) and floatLiteral(equals(314e-2))
  1711. match 3.14
  1712. integerLiteral(equals(42))
  1713. matches 42
  1714. Note that you cannot directly match a negative numeric literal because the
  1715. minus sign is not part of the literal: It is a unary operator whose operand
  1716. is the positive numeric literal. Instead, you must use a unaryOperator()
  1717. matcher to match the minus sign:
  1718. unaryOperator(hasOperatorName("-"),
  1719. hasUnaryOperand(integerLiteral(equals(13))))
  1720. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXBoolLiteralExpr.html">CXXBoolLiteralExpr</a>&gt;,
  1721. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;
  1722. </pre></td></tr>
  1723. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;</td><td class="name" onclick="toggle('equals4')"><a name="equals4Anchor">equals</a></td><td>bool Value</td></tr>
  1724. <tr><td colspan="4" class="doc" id="equals4"><pre></pre></td></tr>
  1725. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;</td><td class="name" onclick="toggle('equals10')"><a name="equals10Anchor">equals</a></td><td>double Value</td></tr>
  1726. <tr><td colspan="4" class="doc" id="equals10"><pre></pre></td></tr>
  1727. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;</td><td class="name" onclick="toggle('equals7')"><a name="equals7Anchor">equals</a></td><td>unsigned Value</td></tr>
  1728. <tr><td colspan="4" class="doc" id="equals7"><pre></pre></td></tr>
  1729. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>&gt;</td><td class="name" onclick="toggle('templateArgumentCountIs0')"><a name="templateArgumentCountIs0Anchor">templateArgumentCountIs</a></td><td>unsigned N</td></tr>
  1730. <tr><td colspan="4" class="doc" id="templateArgumentCountIs0"><pre>Matches if the number of template arguments equals N.
  1731. Given
  1732. template&lt;typename T&gt; struct C {};
  1733. C&lt;int&gt; c;
  1734. classTemplateSpecializationDecl(templateArgumentCountIs(1))
  1735. matches C&lt;int&gt;.
  1736. </pre></td></tr>
  1737. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CompoundStmt.html">CompoundStmt</a>&gt;</td><td class="name" onclick="toggle('statementCountIs0')"><a name="statementCountIs0Anchor">statementCountIs</a></td><td>unsigned N</td></tr>
  1738. <tr><td colspan="4" class="doc" id="statementCountIs0"><pre>Checks that a compound statement contains a specific number of
  1739. child statements.
  1740. Example: Given
  1741. { for (;;) {} }
  1742. compoundStmt(statementCountIs(0)))
  1743. matches '{}'
  1744. but does not match the outer compound statement.
  1745. </pre></td></tr>
  1746. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ConstantArrayType.html">ConstantArrayType</a>&gt;</td><td class="name" onclick="toggle('hasSize0')"><a name="hasSize0Anchor">hasSize</a></td><td>unsigned N</td></tr>
  1747. <tr><td colspan="4" class="doc" id="hasSize0"><pre>Matches nodes that have the specified size.
  1748. Given
  1749. int a[42];
  1750. int b[2 * 21];
  1751. int c[41], d[43];
  1752. char *s = "abcd";
  1753. wchar_t *ws = L"abcd";
  1754. char *w = "a";
  1755. constantArrayType(hasSize(42))
  1756. matches "int a[42]" and "int b[2 * 21]"
  1757. stringLiteral(hasSize(4))
  1758. matches "abcd", L"abcd"
  1759. </pre></td></tr>
  1760. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt;</td><td class="name" onclick="toggle('declCountIs0')"><a name="declCountIs0Anchor">declCountIs</a></td><td>unsigned N</td></tr>
  1761. <tr><td colspan="4" class="doc" id="declCountIs0"><pre>Matches declaration statements that contain a specific number of
  1762. declarations.
  1763. Example: Given
  1764. int a, b;
  1765. int c;
  1766. int d = 2, e;
  1767. declCountIs(2)
  1768. matches 'int a, b;' and 'int d = 2, e;', but not 'int c;'.
  1769. </pre></td></tr>
  1770. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('equalsBoundNode1')"><a name="equalsBoundNode1Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
  1771. <tr><td colspan="4" class="doc" id="equalsBoundNode1"><pre>Matches if a node equals a previously bound node.
  1772. Matches a node if it equals the node previously bound to ID.
  1773. Given
  1774. class X { int a; int b; };
  1775. cxxRecordDecl(
  1776. has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
  1777. has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
  1778. matches the class X, as a and b have the same type.
  1779. Note that when multiple matches are involved via forEach* matchers,
  1780. equalsBoundNodes acts as a filter.
  1781. For example:
  1782. compoundStmt(
  1783. forEachDescendant(varDecl().bind("d")),
  1784. forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
  1785. will trigger a match for each combination of variable declaration
  1786. and reference to that variable declaration within a compound statement.
  1787. </pre></td></tr>
  1788. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('equalsNode0')"><a name="equalsNode0Anchor">equalsNode</a></td><td>const Decl* Other</td></tr>
  1789. <tr><td colspan="4" class="doc" id="equalsNode0"><pre>Matches if a node equals another node.
  1790. Decl has pointer identity in the AST.
  1791. </pre></td></tr>
  1792. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('hasAttr0')"><a name="hasAttr0Anchor">hasAttr</a></td><td>attr::Kind AttrKind</td></tr>
  1793. <tr><td colspan="4" class="doc" id="hasAttr0"><pre>Matches declaration that has a given attribute.
  1794. Given
  1795. __attribute__((device)) void f() { ... }
  1796. decl(hasAttr(clang::attr::CUDADevice)) matches the function declaration of
  1797. f. If the matcher is use from clang-query, attr::Kind parameter should be
  1798. passed as a quoted string. e.g., hasAttr("attr::CUDADevice").
  1799. </pre></td></tr>
  1800. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isExpansionInFileMatching0')"><a name="isExpansionInFileMatching0Anchor">isExpansionInFileMatching</a></td><td>std::string RegExp</td></tr>
  1801. <tr><td colspan="4" class="doc" id="isExpansionInFileMatching0"><pre>Matches AST nodes that were expanded within files whose name is
  1802. partially matching a given regex.
  1803. Example matches Y but not X
  1804. (matcher = cxxRecordDecl(isExpansionInFileMatching("AST.*"))
  1805. #include "ASTMatcher.h"
  1806. class X {};
  1807. ASTMatcher.h:
  1808. class Y {};
  1809. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  1810. </pre></td></tr>
  1811. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isExpansionInMainFile0')"><a name="isExpansionInMainFile0Anchor">isExpansionInMainFile</a></td><td></td></tr>
  1812. <tr><td colspan="4" class="doc" id="isExpansionInMainFile0"><pre>Matches AST nodes that were expanded within the main-file.
  1813. Example matches X but not Y
  1814. (matcher = cxxRecordDecl(isExpansionInMainFile())
  1815. #include &lt;Y.h&gt;
  1816. class X {};
  1817. Y.h:
  1818. class Y {};
  1819. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  1820. </pre></td></tr>
  1821. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isExpansionInSystemHeader0')"><a name="isExpansionInSystemHeader0Anchor">isExpansionInSystemHeader</a></td><td></td></tr>
  1822. <tr><td colspan="4" class="doc" id="isExpansionInSystemHeader0"><pre>Matches AST nodes that were expanded within system-header-files.
  1823. Example matches Y but not X
  1824. (matcher = cxxRecordDecl(isExpansionInSystemHeader())
  1825. #include &lt;SystemHeader.h&gt;
  1826. class X {};
  1827. SystemHeader.h:
  1828. class Y {};
  1829. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  1830. </pre></td></tr>
  1831. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isImplicit0')"><a name="isImplicit0Anchor">isImplicit</a></td><td></td></tr>
  1832. <tr><td colspan="4" class="doc" id="isImplicit0"><pre>Matches a declaration that has been implicitly added
  1833. by the compiler (eg. implicit defaultcopy constructors).
  1834. </pre></td></tr>
  1835. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isPrivate0')"><a name="isPrivate0Anchor">isPrivate</a></td><td></td></tr>
  1836. <tr><td colspan="4" class="doc" id="isPrivate0"><pre>Matches private C++ declarations.
  1837. Given
  1838. class C {
  1839. public: int a;
  1840. protected: int b;
  1841. private: int c;
  1842. };
  1843. fieldDecl(isPrivate())
  1844. matches 'int c;'
  1845. </pre></td></tr>
  1846. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isProtected0')"><a name="isProtected0Anchor">isProtected</a></td><td></td></tr>
  1847. <tr><td colspan="4" class="doc" id="isProtected0"><pre>Matches protected C++ declarations.
  1848. Given
  1849. class C {
  1850. public: int a;
  1851. protected: int b;
  1852. private: int c;
  1853. };
  1854. fieldDecl(isProtected())
  1855. matches 'int b;'
  1856. </pre></td></tr>
  1857. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isPublic0')"><a name="isPublic0Anchor">isPublic</a></td><td></td></tr>
  1858. <tr><td colspan="4" class="doc" id="isPublic0"><pre>Matches public C++ declarations.
  1859. Given
  1860. class C {
  1861. public: int a;
  1862. protected: int b;
  1863. private: int c;
  1864. };
  1865. fieldDecl(isPublic())
  1866. matches 'int a;'
  1867. </pre></td></tr>
  1868. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DesignatedInitExpr.html">DesignatedInitExpr</a>&gt;</td><td class="name" onclick="toggle('designatorCountIs0')"><a name="designatorCountIs0Anchor">designatorCountIs</a></td><td>unsigned N</td></tr>
  1869. <tr><td colspan="4" class="doc" id="designatorCountIs0"><pre>Matches designated initializer expressions that contain
  1870. a specific number of designators.
  1871. Example: Given
  1872. point ptarray[10] = { [2].y = 1.0, [0].x = 1.0 };
  1873. point ptarray2[10] = { [2].y = 1.0, [2].x = 0.0, [0].x = 1.0 };
  1874. designatorCountIs(2)
  1875. matches '{ [2].y = 1.0, [0].x = 1.0 }',
  1876. but not '{ [2].y = 1.0, [2].x = 0.0, [0].x = 1.0 }'.
  1877. </pre></td></tr>
  1878. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FieldDecl.html">FieldDecl</a>&gt;</td><td class="name" onclick="toggle('hasBitWidth0')"><a name="hasBitWidth0Anchor">hasBitWidth</a></td><td>unsigned Width</td></tr>
  1879. <tr><td colspan="4" class="doc" id="hasBitWidth0"><pre>Matches non-static data members that are bit-fields of the specified
  1880. bit width.
  1881. Given
  1882. class C {
  1883. int a : 2;
  1884. int b : 4;
  1885. int c : 2;
  1886. };
  1887. fieldDecl(hasBitWidth(2))
  1888. matches 'int a;' and 'int c;' but not 'int b;'.
  1889. </pre></td></tr>
  1890. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FieldDecl.html">FieldDecl</a>&gt;</td><td class="name" onclick="toggle('isBitField0')"><a name="isBitField0Anchor">isBitField</a></td><td></td></tr>
  1891. <tr><td colspan="4" class="doc" id="isBitField0"><pre>Matches non-static data members that are bit-fields.
  1892. Given
  1893. class C {
  1894. int a : 2;
  1895. int b;
  1896. };
  1897. fieldDecl(isBitField())
  1898. matches 'int a;' but not 'int b;'.
  1899. </pre></td></tr>
  1900. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;</td><td class="name" onclick="toggle('equals1')"><a name="equals1Anchor">equals</a></td><td>ValueT Value</td></tr>
  1901. <tr><td colspan="4" class="doc" id="equals1"><pre>Matches literals that are equal to the given value of type ValueT.
  1902. Given
  1903. f('false, 3.14, 42);
  1904. characterLiteral(equals(0))
  1905. matches 'cxxBoolLiteral(equals(false)) and cxxBoolLiteral(equals(0))
  1906. match false
  1907. floatLiteral(equals(3.14)) and floatLiteral(equals(314e-2))
  1908. match 3.14
  1909. integerLiteral(equals(42))
  1910. matches 42
  1911. Note that you cannot directly match a negative numeric literal because the
  1912. minus sign is not part of the literal: It is a unary operator whose operand
  1913. is the positive numeric literal. Instead, you must use a unaryOperator()
  1914. matcher to match the minus sign:
  1915. unaryOperator(hasOperatorName("-"),
  1916. hasUnaryOperand(integerLiteral(equals(13))))
  1917. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXBoolLiteralExpr.html">CXXBoolLiteralExpr</a>&gt;,
  1918. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;
  1919. </pre></td></tr>
  1920. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;</td><td class="name" onclick="toggle('equals12')"><a name="equals12Anchor">equals</a></td><td>double Value</td></tr>
  1921. <tr><td colspan="4" class="doc" id="equals12"><pre></pre></td></tr>
  1922. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('hasDynamicExceptionSpec0')"><a name="hasDynamicExceptionSpec0Anchor">hasDynamicExceptionSpec</a></td><td></td></tr>
  1923. <tr><td colspan="4" class="doc" id="hasDynamicExceptionSpec0"><pre>Matches functions that have a dynamic exception specification.
  1924. Given:
  1925. void f();
  1926. void g() noexcept;
  1927. void h() noexcept(true);
  1928. void i() noexcept(false);
  1929. void j() throw();
  1930. void k() throw(int);
  1931. void l() throw(...);
  1932. functionDecl(hasDynamicExceptionSpec()) and
  1933. functionProtoType(hasDynamicExceptionSpec())
  1934. match the declarations of j, k, and l, but not f, g, h, or i.
  1935. </pre></td></tr>
  1936. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('hasOverloadedOperatorName0')"><a name="hasOverloadedOperatorName0Anchor">hasOverloadedOperatorName</a></td><td>StringRef Name</td></tr>
  1937. <tr><td colspan="4" class="doc" id="hasOverloadedOperatorName0"><pre>Matches overloaded operator names.
  1938. Matches overloaded operator names specified in strings without the
  1939. "operator" prefix: e.g. "&lt;&lt;".
  1940. Given:
  1941. class A { int operator*(); };
  1942. const A &amp;operator&lt;&lt;(const A &amp;a, const A &amp;b);
  1943. A a;
  1944. a &lt;&lt; a; &lt;-- This matches
  1945. cxxOperatorCallExpr(hasOverloadedOperatorName("&lt;&lt;"))) matches the
  1946. specified line and
  1947. cxxRecordDecl(hasMethod(hasOverloadedOperatorName("*")))
  1948. matches the declaration of A.
  1949. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXOperatorCallExpr.html">CXXOperatorCallExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;
  1950. </pre></td></tr>
  1951. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isConstexpr1')"><a name="isConstexpr1Anchor">isConstexpr</a></td><td></td></tr>
  1952. <tr><td colspan="4" class="doc" id="isConstexpr1"><pre>Matches constexpr variable and function declarations.
  1953. Given:
  1954. constexpr int foo = 42;
  1955. constexpr int bar();
  1956. varDecl(isConstexpr())
  1957. matches the declaration of foo.
  1958. functionDecl(isConstexpr())
  1959. matches the declaration of bar.
  1960. </pre></td></tr>
  1961. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isDefaulted0')"><a name="isDefaulted0Anchor">isDefaulted</a></td><td></td></tr>
  1962. <tr><td colspan="4" class="doc" id="isDefaulted0"><pre>Matches defaulted function declarations.
  1963. Given:
  1964. class A { ~A(); };
  1965. class B { ~B() = default; };
  1966. functionDecl(isDefaulted())
  1967. matches the declaration of ~B, but not ~A.
  1968. </pre></td></tr>
  1969. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isDefinition2')"><a name="isDefinition2Anchor">isDefinition</a></td><td></td></tr>
  1970. <tr><td colspan="4" class="doc" id="isDefinition2"><pre>Matches if a declaration has a body attached.
  1971. Example matches A, va, fa
  1972. class A {};
  1973. class B; Doesn't match, as it has no body.
  1974. int va;
  1975. extern int vb; Doesn't match, as it doesn't define the variable.
  1976. void fa() {}
  1977. void fb(); Doesn't match, as it has no body.
  1978. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagDecl.html">TagDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;
  1979. </pre></td></tr>
  1980. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isDeleted0')"><a name="isDeleted0Anchor">isDeleted</a></td><td></td></tr>
  1981. <tr><td colspan="4" class="doc" id="isDeleted0"><pre>Matches deleted function declarations.
  1982. Given:
  1983. void Func();
  1984. void DeletedFunc() = delete;
  1985. functionDecl(isDeleted())
  1986. matches the declaration of DeletedFunc, but not Func.
  1987. </pre></td></tr>
  1988. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isExplicitTemplateSpecialization0')"><a name="isExplicitTemplateSpecialization0Anchor">isExplicitTemplateSpecialization</a></td><td></td></tr>
  1989. <tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization0"><pre>Matches explicit template specializations of function, class, or
  1990. static member variable template instantiations.
  1991. Given
  1992. template&lt;typename T&gt; void A(T t) { }
  1993. template&lt;&gt; void A(int N) { }
  1994. functionDecl(isExplicitTemplateSpecialization())
  1995. matches the specialization A&lt;int&gt;().
  1996. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
  1997. </pre></td></tr>
  1998. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isExternC0')"><a name="isExternC0Anchor">isExternC</a></td><td></td></tr>
  1999. <tr><td colspan="4" class="doc" id="isExternC0"><pre>Matches extern "C" function or variable declarations.
  2000. Given:
  2001. extern "C" void f() {}
  2002. extern "C" { void g() {} }
  2003. void h() {}
  2004. extern "C" int x = 1;
  2005. extern "C" int y = 2;
  2006. int z = 3;
  2007. functionDecl(isExternC())
  2008. matches the declaration of f and g, but not the declaration of h.
  2009. varDecl(isExternC())
  2010. matches the declaration of x and y, but not the declaration of z.
  2011. </pre></td></tr>
  2012. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isInline1')"><a name="isInline1Anchor">isInline</a></td><td></td></tr>
  2013. <tr><td colspan="4" class="doc" id="isInline1"><pre>Matches function and namespace declarations that are marked with
  2014. the inline keyword.
  2015. Given
  2016. inline void f();
  2017. void g();
  2018. namespace n {
  2019. inline namespace m {}
  2020. }
  2021. functionDecl(isInline()) will match ::f().
  2022. namespaceDecl(isInline()) will match n::m.
  2023. </pre></td></tr>
  2024. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isNoThrow0')"><a name="isNoThrow0Anchor">isNoThrow</a></td><td></td></tr>
  2025. <tr><td colspan="4" class="doc" id="isNoThrow0"><pre>Matches functions that have a non-throwing exception specification.
  2026. Given:
  2027. void f();
  2028. void g() noexcept;
  2029. void h() throw();
  2030. void i() throw(int);
  2031. void j() noexcept(false);
  2032. functionDecl(isNoThrow()) and functionProtoType(isNoThrow())
  2033. match the declarations of g, and h, but not f, i or j.
  2034. </pre></td></tr>
  2035. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isStaticStorageClass0')"><a name="isStaticStorageClass0Anchor">isStaticStorageClass</a></td><td></td></tr>
  2036. <tr><td colspan="4" class="doc" id="isStaticStorageClass0"><pre>Matches variablefunction declarations that have "static" storage
  2037. class specifier ("static" keyword) written in the source.
  2038. Given:
  2039. static void f() {}
  2040. static int i = 0;
  2041. extern int j;
  2042. int k;
  2043. functionDecl(isStaticStorageClass())
  2044. matches the function declaration f.
  2045. varDecl(isStaticStorageClass())
  2046. matches the variable declaration i.
  2047. </pre></td></tr>
  2048. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isTemplateInstantiation0')"><a name="isTemplateInstantiation0Anchor">isTemplateInstantiation</a></td><td></td></tr>
  2049. <tr><td colspan="4" class="doc" id="isTemplateInstantiation0"><pre>Matches template instantiations of function, class, or static
  2050. member variable template instantiations.
  2051. Given
  2052. template &lt;typename T&gt; class X {}; class A {}; X&lt;A&gt; x;
  2053. or
  2054. template &lt;typename T&gt; class X {}; class A {}; template class X&lt;A&gt;;
  2055. cxxRecordDecl(hasName("::X"), isTemplateInstantiation())
  2056. matches the template instantiation of X&lt;A&gt;.
  2057. But given
  2058. template &lt;typename T&gt; class X {}; class A {};
  2059. template &lt;&gt; class X&lt;A&gt; {}; X&lt;A&gt; x;
  2060. cxxRecordDecl(hasName("::X"), isTemplateInstantiation())
  2061. does not match, as X&lt;A&gt; is an explicit template specialization.
  2062. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
  2063. </pre></td></tr>
  2064. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isVariadic0')"><a name="isVariadic0Anchor">isVariadic</a></td><td></td></tr>
  2065. <tr><td colspan="4" class="doc" id="isVariadic0"><pre>Matches if a function declaration is variadic.
  2066. Example matches f, but not g or h. The function i will not match, even when
  2067. compiled in C mode.
  2068. void f(...);
  2069. void g(int);
  2070. template &lt;typename... Ts&gt; void h(Ts...);
  2071. void i();
  2072. </pre></td></tr>
  2073. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('parameterCountIs0')"><a name="parameterCountIs0Anchor">parameterCountIs</a></td><td>unsigned N</td></tr>
  2074. <tr><td colspan="4" class="doc" id="parameterCountIs0"><pre>Matches FunctionDecls and FunctionProtoTypes that have a
  2075. specific parameter count.
  2076. Given
  2077. void f(int i) {}
  2078. void g(int i, int j) {}
  2079. void h(int i, int j);
  2080. void j(int i);
  2081. void k(int x, int y, int z, ...);
  2082. functionDecl(parameterCountIs(2))
  2083. matches void g(int i, int j) {}
  2084. functionProtoType(parameterCountIs(2))
  2085. matches void h(int i, int j)
  2086. functionProtoType(parameterCountIs(3))
  2087. matches void k(int x, int y, int z, ...);
  2088. </pre></td></tr>
  2089. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionProtoType.html">FunctionProtoType</a>&gt;</td><td class="name" onclick="toggle('hasDynamicExceptionSpec1')"><a name="hasDynamicExceptionSpec1Anchor">hasDynamicExceptionSpec</a></td><td></td></tr>
  2090. <tr><td colspan="4" class="doc" id="hasDynamicExceptionSpec1"><pre>Matches functions that have a dynamic exception specification.
  2091. Given:
  2092. void f();
  2093. void g() noexcept;
  2094. void h() noexcept(true);
  2095. void i() noexcept(false);
  2096. void j() throw();
  2097. void k() throw(int);
  2098. void l() throw(...);
  2099. functionDecl(hasDynamicExceptionSpec()) and
  2100. functionProtoType(hasDynamicExceptionSpec())
  2101. match the declarations of j, k, and l, but not f, g, h, or i.
  2102. </pre></td></tr>
  2103. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionProtoType.html">FunctionProtoType</a>&gt;</td><td class="name" onclick="toggle('isNoThrow1')"><a name="isNoThrow1Anchor">isNoThrow</a></td><td></td></tr>
  2104. <tr><td colspan="4" class="doc" id="isNoThrow1"><pre>Matches functions that have a non-throwing exception specification.
  2105. Given:
  2106. void f();
  2107. void g() noexcept;
  2108. void h() throw();
  2109. void i() throw(int);
  2110. void j() noexcept(false);
  2111. functionDecl(isNoThrow()) and functionProtoType(isNoThrow())
  2112. match the declarations of g, and h, but not f, i or j.
  2113. </pre></td></tr>
  2114. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionProtoType.html">FunctionProtoType</a>&gt;</td><td class="name" onclick="toggle('parameterCountIs1')"><a name="parameterCountIs1Anchor">parameterCountIs</a></td><td>unsigned N</td></tr>
  2115. <tr><td colspan="4" class="doc" id="parameterCountIs1"><pre>Matches FunctionDecls and FunctionProtoTypes that have a
  2116. specific parameter count.
  2117. Given
  2118. void f(int i) {}
  2119. void g(int i, int j) {}
  2120. void h(int i, int j);
  2121. void j(int i);
  2122. void k(int x, int y, int z, ...);
  2123. functionDecl(parameterCountIs(2))
  2124. matches void g(int i, int j) {}
  2125. functionProtoType(parameterCountIs(2))
  2126. matches void h(int i, int j)
  2127. functionProtoType(parameterCountIs(3))
  2128. matches void k(int x, int y, int z, ...);
  2129. </pre></td></tr>
  2130. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;</td><td class="name" onclick="toggle('equals0')"><a name="equals0Anchor">equals</a></td><td>ValueT Value</td></tr>
  2131. <tr><td colspan="4" class="doc" id="equals0"><pre>Matches literals that are equal to the given value of type ValueT.
  2132. Given
  2133. f('false, 3.14, 42);
  2134. characterLiteral(equals(0))
  2135. matches 'cxxBoolLiteral(equals(false)) and cxxBoolLiteral(equals(0))
  2136. match false
  2137. floatLiteral(equals(3.14)) and floatLiteral(equals(314e-2))
  2138. match 3.14
  2139. integerLiteral(equals(42))
  2140. matches 42
  2141. Note that you cannot directly match a negative numeric literal because the
  2142. minus sign is not part of the literal: It is a unary operator whose operand
  2143. is the positive numeric literal. Instead, you must use a unaryOperator()
  2144. matcher to match the minus sign:
  2145. unaryOperator(hasOperatorName("-"),
  2146. hasUnaryOperand(integerLiteral(equals(13))))
  2147. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXBoolLiteralExpr.html">CXXBoolLiteralExpr</a>&gt;,
  2148. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;
  2149. </pre></td></tr>
  2150. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;</td><td class="name" onclick="toggle('equals6')"><a name="equals6Anchor">equals</a></td><td>bool Value</td></tr>
  2151. <tr><td colspan="4" class="doc" id="equals6"><pre></pre></td></tr>
  2152. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;</td><td class="name" onclick="toggle('equals13')"><a name="equals13Anchor">equals</a></td><td>double Value</td></tr>
  2153. <tr><td colspan="4" class="doc" id="equals13"><pre></pre></td></tr>
  2154. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;</td><td class="name" onclick="toggle('equals9')"><a name="equals9Anchor">equals</a></td><td>unsigned Value</td></tr>
  2155. <tr><td colspan="4" class="doc" id="equals9"><pre></pre></td></tr>
  2156. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;</td><td class="name" onclick="toggle('isArrow0')"><a name="isArrow0Anchor">isArrow</a></td><td></td></tr>
  2157. <tr><td colspan="4" class="doc" id="isArrow0"><pre>Matches member expressions that are called with '-&gt;' as opposed
  2158. to '.'.
  2159. Member calls on the implicit this pointer match as called with '-&gt;'.
  2160. Given
  2161. class Y {
  2162. void x() { this-&gt;x(); x(); Y y; y.x(); a; this-&gt;b; Y::b; }
  2163. int a;
  2164. static int b;
  2165. };
  2166. memberExpr(isArrow())
  2167. matches this-&gt;x, x, y.x, a, this-&gt;b
  2168. </pre></td></tr>
  2169. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;</td><td class="name" onclick="toggle('hasExternalFormalLinkage0')"><a name="hasExternalFormalLinkage0Anchor">hasExternalFormalLinkage</a></td><td></td></tr>
  2170. <tr><td colspan="4" class="doc" id="hasExternalFormalLinkage0"><pre>Matches a declaration that has external formal linkage.
  2171. Example matches only z (matcher = varDecl(hasExternalFormalLinkage()))
  2172. void f() {
  2173. int x;
  2174. static int y;
  2175. }
  2176. int z;
  2177. Example matches f() because it has external formal linkage despite being
  2178. unique to the translation unit as though it has internal likage
  2179. (matcher = functionDecl(hasExternalFormalLinkage()))
  2180. namespace {
  2181. void f() {}
  2182. }
  2183. </pre></td></tr>
  2184. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;</td><td class="name" onclick="toggle('hasName0')"><a name="hasName0Anchor">hasName</a></td><td>std::string Name</td></tr>
  2185. <tr><td colspan="4" class="doc" id="hasName0"><pre>Matches NamedDecl nodes that have the specified name.
  2186. Supports specifying enclosing namespaces or classes by prefixing the name
  2187. with '&lt;enclosing&gt;::'.
  2188. Does not match typedefs of an underlying type with the given name.
  2189. Example matches X (Name == "X")
  2190. class X;
  2191. Example matches X (Name is one of "::a::b::X", "a::b::X", "b::X", "X")
  2192. namespace a { namespace b { class X; } }
  2193. </pre></td></tr>
  2194. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;</td><td class="name" onclick="toggle('matchesName0')"><a name="matchesName0Anchor">matchesName</a></td><td>std::string RegExp</td></tr>
  2195. <tr><td colspan="4" class="doc" id="matchesName0"><pre>Matches NamedDecl nodes whose fully qualified names contain
  2196. a substring matched by the given RegExp.
  2197. Supports specifying enclosing namespaces or classes by
  2198. prefixing the name with '&lt;enclosing&gt;::'. Does not match typedefs
  2199. of an underlying type with the given name.
  2200. Example matches X (regexp == "::X")
  2201. class X;
  2202. Example matches X (regexp is one of "::X", "^foo::.*X", among others)
  2203. namespace foo { namespace bar { class X; } }
  2204. </pre></td></tr>
  2205. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamespaceDecl.html">NamespaceDecl</a>&gt;</td><td class="name" onclick="toggle('isAnonymous0')"><a name="isAnonymous0Anchor">isAnonymous</a></td><td></td></tr>
  2206. <tr><td colspan="4" class="doc" id="isAnonymous0"><pre>Matches anonymous namespace declarations.
  2207. Given
  2208. namespace n {
  2209. namespace {} #1
  2210. }
  2211. namespaceDecl(isAnonymous()) will match #1 but not ::n.
  2212. </pre></td></tr>
  2213. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamespaceDecl.html">NamespaceDecl</a>&gt;</td><td class="name" onclick="toggle('isInline0')"><a name="isInline0Anchor">isInline</a></td><td></td></tr>
  2214. <tr><td colspan="4" class="doc" id="isInline0"><pre>Matches function and namespace declarations that are marked with
  2215. the inline keyword.
  2216. Given
  2217. inline void f();
  2218. void g();
  2219. namespace n {
  2220. inline namespace m {}
  2221. }
  2222. functionDecl(isInline()) will match ::f().
  2223. namespaceDecl(isInline()) will match n::m.
  2224. </pre></td></tr>
  2225. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>&gt;</td><td class="name" onclick="toggle('argumentCountIs2')"><a name="argumentCountIs2Anchor">argumentCountIs</a></td><td>unsigned N</td></tr>
  2226. <tr><td colspan="4" class="doc" id="argumentCountIs2"><pre>Checks that a call expression or a constructor call expression has
  2227. a specific number of arguments (including absent default arguments).
  2228. Example matches f(0, 0) (matcher = callExpr(argumentCountIs(2)))
  2229. void f(int x, int y);
  2230. f(0, 0);
  2231. </pre></td></tr>
  2232. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>&gt;</td><td class="name" onclick="toggle('hasKeywordSelector0')"><a name="hasKeywordSelector0Anchor">hasKeywordSelector</a></td><td></td></tr>
  2233. <tr><td colspan="4" class="doc" id="hasKeywordSelector0"><pre>Matches when the selector is a keyword selector
  2234. objCMessageExpr(hasKeywordSelector()) matches the generated setFrame
  2235. message expression in
  2236. UIWebView *webView = ...;
  2237. CGRect bodyFrame = webView.frame;
  2238. bodyFrame.size.height = self.bodyContentHeight;
  2239. webView.frame = bodyFrame;
  2240. ^---- matches here
  2241. </pre></td></tr>
  2242. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>&gt;</td><td class="name" onclick="toggle('hasNullSelector0')"><a name="hasNullSelector0Anchor">hasNullSelector</a></td><td></td></tr>
  2243. <tr><td colspan="4" class="doc" id="hasNullSelector0"><pre>Matches when the selector is the empty selector
  2244. Matches only when the selector of the objCMessageExpr is NULL. This may
  2245. represent an error condition in the tree!
  2246. </pre></td></tr>
  2247. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>&gt;</td><td class="name" onclick="toggle('hasSelector0')"><a name="hasSelector0Anchor">hasSelector</a></td><td>std::string BaseName</td></tr>
  2248. <tr><td colspan="4" class="doc" id="hasSelector0"><pre>Matches when BaseName == Selector.getAsString()
  2249. matcher = objCMessageExpr(hasSelector("loadHTMLString:baseURL:"));
  2250. matches the outer message expr in the code below, but NOT the message
  2251. invocation for self.bodyView.
  2252. [self.bodyView loadHTMLString:html baseURL:NULL];
  2253. </pre></td></tr>
  2254. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>&gt;</td><td class="name" onclick="toggle('hasUnarySelector0')"><a name="hasUnarySelector0Anchor">hasUnarySelector</a></td><td></td></tr>
  2255. <tr><td colspan="4" class="doc" id="hasUnarySelector0"><pre>Matches when the selector is a Unary Selector
  2256. matcher = objCMessageExpr(matchesSelector(hasUnarySelector());
  2257. matches self.bodyView in the code below, but NOT the outer message
  2258. invocation of "loadHTMLString:baseURL:".
  2259. [self.bodyView loadHTMLString:html baseURL:NULL];
  2260. </pre></td></tr>
  2261. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>&gt;</td><td class="name" onclick="toggle('matchesSelector0')"><a name="matchesSelector0Anchor">matchesSelector</a></td><td>std::string RegExp</td></tr>
  2262. <tr><td colspan="4" class="doc" id="matchesSelector0"><pre>Matches ObjC selectors whose name contains
  2263. a substring matched by the given RegExp.
  2264. matcher = objCMessageExpr(matchesSelector("loadHTMLStringmatches the outer message expr in the code below, but NOT the message
  2265. invocation for self.bodyView.
  2266. [self.bodyView loadHTMLString:html baseURL:NULL];
  2267. </pre></td></tr>
  2268. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>&gt;</td><td class="name" onclick="toggle('numSelectorArgs0')"><a name="numSelectorArgs0Anchor">numSelectorArgs</a></td><td>unsigned N</td></tr>
  2269. <tr><td colspan="4" class="doc" id="numSelectorArgs0"><pre>Matches when the selector has the specified number of arguments
  2270. matcher = objCMessageExpr(numSelectorArgs(0));
  2271. matches self.bodyView in the code below
  2272. matcher = objCMessageExpr(numSelectorArgs(2));
  2273. matches the invocation of "loadHTMLString:baseURL:" but not that
  2274. of self.bodyView
  2275. [self.bodyView loadHTMLString:html baseURL:NULL];
  2276. </pre></td></tr>
  2277. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('asString0')"><a name="asString0Anchor">asString</a></td><td>std::string Name</td></tr>
  2278. <tr><td colspan="4" class="doc" id="asString0"><pre>Matches if the matched type is represented by the given string.
  2279. Given
  2280. class Y { public: void x(); };
  2281. void z() { Y* y; y-&gt;x(); }
  2282. cxxMemberCallExpr(on(hasType(asString("class Y *"))))
  2283. matches y-&gt;x()
  2284. </pre></td></tr>
  2285. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('equalsBoundNode3')"><a name="equalsBoundNode3Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
  2286. <tr><td colspan="4" class="doc" id="equalsBoundNode3"><pre>Matches if a node equals a previously bound node.
  2287. Matches a node if it equals the node previously bound to ID.
  2288. Given
  2289. class X { int a; int b; };
  2290. cxxRecordDecl(
  2291. has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
  2292. has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
  2293. matches the class X, as a and b have the same type.
  2294. Note that when multiple matches are involved via forEach* matchers,
  2295. equalsBoundNodes acts as a filter.
  2296. For example:
  2297. compoundStmt(
  2298. forEachDescendant(varDecl().bind("d")),
  2299. forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
  2300. will trigger a match for each combination of variable declaration
  2301. and reference to that variable declaration within a compound statement.
  2302. </pre></td></tr>
  2303. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('hasLocalQualifiers0')"><a name="hasLocalQualifiers0Anchor">hasLocalQualifiers</a></td><td></td></tr>
  2304. <tr><td colspan="4" class="doc" id="hasLocalQualifiers0"><pre>Matches QualType nodes that have local CV-qualifiers attached to
  2305. the node, not hidden within a typedef.
  2306. Given
  2307. typedef const int const_int;
  2308. const_int i;
  2309. int *const j;
  2310. int *volatile k;
  2311. int m;
  2312. varDecl(hasType(hasLocalQualifiers())) matches only j and k.
  2313. i is const-qualified but the qualifier is not local.
  2314. </pre></td></tr>
  2315. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('isAnyCharacter0')"><a name="isAnyCharacter0Anchor">isAnyCharacter</a></td><td></td></tr>
  2316. <tr><td colspan="4" class="doc" id="isAnyCharacter0"><pre>Matches QualType nodes that are of character type.
  2317. Given
  2318. void a(char);
  2319. void b(wchar_t);
  2320. void c(double);
  2321. functionDecl(hasAnyParameter(hasType(isAnyCharacter())))
  2322. matches "a(char)", "b(wchar_t)", but not "c(double)".
  2323. </pre></td></tr>
  2324. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('isAnyPointer0')"><a name="isAnyPointer0Anchor">isAnyPointer</a></td><td></td></tr>
  2325. <tr><td colspan="4" class="doc" id="isAnyPointer0"><pre>Matches QualType nodes that are of any pointer type; this includes
  2326. the Objective-C object pointer type, which is different despite being
  2327. syntactically similar.
  2328. Given
  2329. int *i = nullptr;
  2330. @interface Foo
  2331. @end
  2332. Foo *f;
  2333. int j;
  2334. varDecl(hasType(isAnyPointer()))
  2335. matches "int *i" and "Foo *f", but not "int j".
  2336. </pre></td></tr>
  2337. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('isConstQualified0')"><a name="isConstQualified0Anchor">isConstQualified</a></td><td></td></tr>
  2338. <tr><td colspan="4" class="doc" id="isConstQualified0"><pre>Matches QualType nodes that are const-qualified, i.e., that
  2339. include "top-level" const.
  2340. Given
  2341. void a(int);
  2342. void b(int const);
  2343. void c(const int);
  2344. void d(const int*);
  2345. void e(int const) {};
  2346. functionDecl(hasAnyParameter(hasType(isConstQualified())))
  2347. matches "void b(int const)", "void c(const int)" and
  2348. "void e(int const) {}". It does not match d as there
  2349. is no top-level const on the parameter type "const int *".
  2350. </pre></td></tr>
  2351. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('isInteger0')"><a name="isInteger0Anchor">isInteger</a></td><td></td></tr>
  2352. <tr><td colspan="4" class="doc" id="isInteger0"><pre>Matches QualType nodes that are of integer type.
  2353. Given
  2354. void a(int);
  2355. void b(long);
  2356. void c(double);
  2357. functionDecl(hasAnyParameter(hasType(isInteger())))
  2358. matches "a(int)", "b(long)", but not "c(double)".
  2359. </pre></td></tr>
  2360. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('isSignedInteger0')"><a name="isSignedInteger0Anchor">isSignedInteger</a></td><td></td></tr>
  2361. <tr><td colspan="4" class="doc" id="isSignedInteger0"><pre>Matches QualType nodes that are of signed integer type.
  2362. Given
  2363. void a(int);
  2364. void b(unsigned long);
  2365. void c(double);
  2366. functionDecl(hasAnyParameter(hasType(isSignedInteger())))
  2367. matches "a(int)", but not "b(unsigned long)" and "c(double)".
  2368. </pre></td></tr>
  2369. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('isUnsignedInteger0')"><a name="isUnsignedInteger0Anchor">isUnsignedInteger</a></td><td></td></tr>
  2370. <tr><td colspan="4" class="doc" id="isUnsignedInteger0"><pre>Matches QualType nodes that are of unsigned integer type.
  2371. Given
  2372. void a(int);
  2373. void b(unsigned long);
  2374. void c(double);
  2375. functionDecl(hasAnyParameter(hasType(isUnsignedInteger())))
  2376. matches "b(unsigned long)", but not "a(int)" and "c(double)".
  2377. </pre></td></tr>
  2378. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('isVolatileQualified0')"><a name="isVolatileQualified0Anchor">isVolatileQualified</a></td><td></td></tr>
  2379. <tr><td colspan="4" class="doc" id="isVolatileQualified0"><pre>Matches QualType nodes that are volatile-qualified, i.e., that
  2380. include "top-level" volatile.
  2381. Given
  2382. void a(int);
  2383. void b(int volatile);
  2384. void c(volatile int);
  2385. void d(volatile int*);
  2386. void e(int volatile) {};
  2387. functionDecl(hasAnyParameter(hasType(isVolatileQualified())))
  2388. matches "void b(int volatile)", "void c(volatile int)" and
  2389. "void e(int volatile) {}". It does not match d as there
  2390. is no top-level volatile on the parameter type "volatile int *".
  2391. </pre></td></tr>
  2392. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordDecl.html">RecordDecl</a>&gt;</td><td class="name" onclick="toggle('isClass0')"><a name="isClass0Anchor">isClass</a></td><td></td></tr>
  2393. <tr><td colspan="4" class="doc" id="isClass0"><pre>Matches RecordDecl object that are spelled with "class."
  2394. Example matches C, but not S or U.
  2395. struct S {};
  2396. class C {};
  2397. union U {};
  2398. </pre></td></tr>
  2399. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordDecl.html">RecordDecl</a>&gt;</td><td class="name" onclick="toggle('isStruct0')"><a name="isStruct0Anchor">isStruct</a></td><td></td></tr>
  2400. <tr><td colspan="4" class="doc" id="isStruct0"><pre>Matches RecordDecl object that are spelled with "struct."
  2401. Example matches S, but not C or U.
  2402. struct S {};
  2403. class C {};
  2404. union U {};
  2405. </pre></td></tr>
  2406. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordDecl.html">RecordDecl</a>&gt;</td><td class="name" onclick="toggle('isUnion0')"><a name="isUnion0Anchor">isUnion</a></td><td></td></tr>
  2407. <tr><td colspan="4" class="doc" id="isUnion0"><pre>Matches RecordDecl object that are spelled with "union."
  2408. Example matches U, but not C or S.
  2409. struct S {};
  2410. class C {};
  2411. union U {};
  2412. </pre></td></tr>
  2413. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('equalsBoundNode0')"><a name="equalsBoundNode0Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
  2414. <tr><td colspan="4" class="doc" id="equalsBoundNode0"><pre>Matches if a node equals a previously bound node.
  2415. Matches a node if it equals the node previously bound to ID.
  2416. Given
  2417. class X { int a; int b; };
  2418. cxxRecordDecl(
  2419. has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
  2420. has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
  2421. matches the class X, as a and b have the same type.
  2422. Note that when multiple matches are involved via forEach* matchers,
  2423. equalsBoundNodes acts as a filter.
  2424. For example:
  2425. compoundStmt(
  2426. forEachDescendant(varDecl().bind("d")),
  2427. forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
  2428. will trigger a match for each combination of variable declaration
  2429. and reference to that variable declaration within a compound statement.
  2430. </pre></td></tr>
  2431. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('equalsNode1')"><a name="equalsNode1Anchor">equalsNode</a></td><td>const Stmt* Other</td></tr>
  2432. <tr><td colspan="4" class="doc" id="equalsNode1"><pre>Matches if a node equals another node.
  2433. Stmt has pointer identity in the AST.
  2434. </pre></td></tr>
  2435. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('isExpansionInFileMatching1')"><a name="isExpansionInFileMatching1Anchor">isExpansionInFileMatching</a></td><td>std::string RegExp</td></tr>
  2436. <tr><td colspan="4" class="doc" id="isExpansionInFileMatching1"><pre>Matches AST nodes that were expanded within files whose name is
  2437. partially matching a given regex.
  2438. Example matches Y but not X
  2439. (matcher = cxxRecordDecl(isExpansionInFileMatching("AST.*"))
  2440. #include "ASTMatcher.h"
  2441. class X {};
  2442. ASTMatcher.h:
  2443. class Y {};
  2444. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  2445. </pre></td></tr>
  2446. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('isExpansionInMainFile1')"><a name="isExpansionInMainFile1Anchor">isExpansionInMainFile</a></td><td></td></tr>
  2447. <tr><td colspan="4" class="doc" id="isExpansionInMainFile1"><pre>Matches AST nodes that were expanded within the main-file.
  2448. Example matches X but not Y
  2449. (matcher = cxxRecordDecl(isExpansionInMainFile())
  2450. #include &lt;Y.h&gt;
  2451. class X {};
  2452. Y.h:
  2453. class Y {};
  2454. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  2455. </pre></td></tr>
  2456. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('isExpansionInSystemHeader1')"><a name="isExpansionInSystemHeader1Anchor">isExpansionInSystemHeader</a></td><td></td></tr>
  2457. <tr><td colspan="4" class="doc" id="isExpansionInSystemHeader1"><pre>Matches AST nodes that were expanded within system-header-files.
  2458. Example matches Y but not X
  2459. (matcher = cxxRecordDecl(isExpansionInSystemHeader())
  2460. #include &lt;SystemHeader.h&gt;
  2461. class X {};
  2462. SystemHeader.h:
  2463. class Y {};
  2464. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  2465. </pre></td></tr>
  2466. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1StringLiteral.html">StringLiteral</a>&gt;</td><td class="name" onclick="toggle('hasSize1')"><a name="hasSize1Anchor">hasSize</a></td><td>unsigned N</td></tr>
  2467. <tr><td colspan="4" class="doc" id="hasSize1"><pre>Matches nodes that have the specified size.
  2468. Given
  2469. int a[42];
  2470. int b[2 * 21];
  2471. int c[41], d[43];
  2472. char *s = "abcd";
  2473. wchar_t *ws = L"abcd";
  2474. char *w = "a";
  2475. constantArrayType(hasSize(42))
  2476. matches "int a[42]" and "int b[2 * 21]"
  2477. stringLiteral(hasSize(4))
  2478. matches "abcd", L"abcd"
  2479. </pre></td></tr>
  2480. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagDecl.html">TagDecl</a>&gt;</td><td class="name" onclick="toggle('isDefinition0')"><a name="isDefinition0Anchor">isDefinition</a></td><td></td></tr>
  2481. <tr><td colspan="4" class="doc" id="isDefinition0"><pre>Matches if a declaration has a body attached.
  2482. Example matches A, va, fa
  2483. class A {};
  2484. class B; Doesn't match, as it has no body.
  2485. int va;
  2486. extern int vb; Doesn't match, as it doesn't define the variable.
  2487. void fa() {}
  2488. void fb(); Doesn't match, as it has no body.
  2489. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagDecl.html">TagDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;
  2490. </pre></td></tr>
  2491. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('equalsIntegralValue0')"><a name="equalsIntegralValue0Anchor">equalsIntegralValue</a></td><td>std::string Value</td></tr>
  2492. <tr><td colspan="4" class="doc" id="equalsIntegralValue0"><pre>Matches a TemplateArgument of integral type with a given value.
  2493. Note that 'Value' is a string as the template argument's value is
  2494. an arbitrary precision integer. 'Value' must be euqal to the canonical
  2495. representation of that integral value in base 10.
  2496. Given
  2497. template&lt;int T&gt; struct A {};
  2498. C&lt;42&gt; c;
  2499. classTemplateSpecializationDecl(
  2500. hasAnyTemplateArgument(equalsIntegralValue("42")))
  2501. matches the implicit instantiation of C in C&lt;42&gt;.
  2502. </pre></td></tr>
  2503. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('isIntegral0')"><a name="isIntegral0Anchor">isIntegral</a></td><td></td></tr>
  2504. <tr><td colspan="4" class="doc" id="isIntegral0"><pre>Matches a TemplateArgument that is an integral value.
  2505. Given
  2506. template&lt;int T&gt; struct A {};
  2507. C&lt;42&gt; c;
  2508. classTemplateSpecializationDecl(
  2509. hasAnyTemplateArgument(isIntegral()))
  2510. matches the implicit instantiation of C in C&lt;42&gt;
  2511. with isIntegral() matching 42.
  2512. </pre></td></tr>
  2513. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;</td><td class="name" onclick="toggle('templateArgumentCountIs1')"><a name="templateArgumentCountIs1Anchor">templateArgumentCountIs</a></td><td>unsigned N</td></tr>
  2514. <tr><td colspan="4" class="doc" id="templateArgumentCountIs1"><pre>Matches if the number of template arguments equals N.
  2515. Given
  2516. template&lt;typename T&gt; struct C {};
  2517. C&lt;int&gt; c;
  2518. classTemplateSpecializationDecl(templateArgumentCountIs(1))
  2519. matches C&lt;int&gt;.
  2520. </pre></td></tr>
  2521. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td><td class="name" onclick="toggle('isExpansionInFileMatching2')"><a name="isExpansionInFileMatching2Anchor">isExpansionInFileMatching</a></td><td>std::string RegExp</td></tr>
  2522. <tr><td colspan="4" class="doc" id="isExpansionInFileMatching2"><pre>Matches AST nodes that were expanded within files whose name is
  2523. partially matching a given regex.
  2524. Example matches Y but not X
  2525. (matcher = cxxRecordDecl(isExpansionInFileMatching("AST.*"))
  2526. #include "ASTMatcher.h"
  2527. class X {};
  2528. ASTMatcher.h:
  2529. class Y {};
  2530. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  2531. </pre></td></tr>
  2532. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td><td class="name" onclick="toggle('isExpansionInMainFile2')"><a name="isExpansionInMainFile2Anchor">isExpansionInMainFile</a></td><td></td></tr>
  2533. <tr><td colspan="4" class="doc" id="isExpansionInMainFile2"><pre>Matches AST nodes that were expanded within the main-file.
  2534. Example matches X but not Y
  2535. (matcher = cxxRecordDecl(isExpansionInMainFile())
  2536. #include &lt;Y.h&gt;
  2537. class X {};
  2538. Y.h:
  2539. class Y {};
  2540. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  2541. </pre></td></tr>
  2542. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td><td class="name" onclick="toggle('isExpansionInSystemHeader2')"><a name="isExpansionInSystemHeader2Anchor">isExpansionInSystemHeader</a></td><td></td></tr>
  2543. <tr><td colspan="4" class="doc" id="isExpansionInSystemHeader2"><pre>Matches AST nodes that were expanded within system-header-files.
  2544. Example matches Y but not X
  2545. (matcher = cxxRecordDecl(isExpansionInSystemHeader())
  2546. #include &lt;SystemHeader.h&gt;
  2547. class X {};
  2548. SystemHeader.h:
  2549. class Y {};
  2550. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  2551. </pre></td></tr>
  2552. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('booleanType0')"><a name="booleanType0Anchor">booleanType</a></td><td></td></tr>
  2553. <tr><td colspan="4" class="doc" id="booleanType0"><pre>Matches type bool.
  2554. Given
  2555. struct S { bool func(); };
  2556. functionDecl(returns(booleanType()))
  2557. matches "bool func();"
  2558. </pre></td></tr>
  2559. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('equalsBoundNode2')"><a name="equalsBoundNode2Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
  2560. <tr><td colspan="4" class="doc" id="equalsBoundNode2"><pre>Matches if a node equals a previously bound node.
  2561. Matches a node if it equals the node previously bound to ID.
  2562. Given
  2563. class X { int a; int b; };
  2564. cxxRecordDecl(
  2565. has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
  2566. has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
  2567. matches the class X, as a and b have the same type.
  2568. Note that when multiple matches are involved via forEach* matchers,
  2569. equalsBoundNodes acts as a filter.
  2570. For example:
  2571. compoundStmt(
  2572. forEachDescendant(varDecl().bind("d")),
  2573. forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
  2574. will trigger a match for each combination of variable declaration
  2575. and reference to that variable declaration within a compound statement.
  2576. </pre></td></tr>
  2577. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('equalsNode2')"><a name="equalsNode2Anchor">equalsNode</a></td><td>const Type* Other</td></tr>
  2578. <tr><td colspan="4" class="doc" id="equalsNode2"><pre>Matches if a node equals another node.
  2579. Type has pointer identity in the AST.
  2580. </pre></td></tr>
  2581. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('realFloatingPointType0')"><a name="realFloatingPointType0Anchor">realFloatingPointType</a></td><td></td></tr>
  2582. <tr><td colspan="4" class="doc" id="realFloatingPointType0"><pre>Matches any real floating-point type (float, double, long double).
  2583. Given
  2584. int i;
  2585. float f;
  2586. realFloatingPointType()
  2587. matches "float f" but not "int i"
  2588. </pre></td></tr>
  2589. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('voidType0')"><a name="voidType0Anchor">voidType</a></td><td></td></tr>
  2590. <tr><td colspan="4" class="doc" id="voidType0"><pre>Matches type void.
  2591. Given
  2592. struct S { void func(); };
  2593. functionDecl(returns(voidType()))
  2594. matches "void func();"
  2595. </pre></td></tr>
  2596. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt;</td><td class="name" onclick="toggle('ofKind0')"><a name="ofKind0Anchor">ofKind</a></td><td>UnaryExprOrTypeTrait Kind</td></tr>
  2597. <tr><td colspan="4" class="doc" id="ofKind0"><pre>Matches unary expressions of a certain kind.
  2598. Given
  2599. int x;
  2600. int s = sizeof(x) + alignof(x)
  2601. unaryExprOrTypeTraitExpr(ofKind(UETT_SizeOf))
  2602. matches sizeof(x)
  2603. </pre></td></tr>
  2604. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryOperator.html">UnaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasOperatorName1')"><a name="hasOperatorName1Anchor">hasOperatorName</a></td><td>std::string Name</td></tr>
  2605. <tr><td colspan="4" class="doc" id="hasOperatorName1"><pre>Matches the operator Name of operator expressions (binary or
  2606. unary).
  2607. Example matches a || b (matcher = binaryOperator(hasOperatorName("||")))
  2608. !(a || b)
  2609. </pre></td></tr>
  2610. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('hasAutomaticStorageDuration0')"><a name="hasAutomaticStorageDuration0Anchor">hasAutomaticStorageDuration</a></td><td></td></tr>
  2611. <tr><td colspan="4" class="doc" id="hasAutomaticStorageDuration0"><pre>Matches a variable declaration that has automatic storage duration.
  2612. Example matches x, but not y, z, or a.
  2613. (matcher = varDecl(hasAutomaticStorageDuration())
  2614. void f() {
  2615. int x;
  2616. static int y;
  2617. thread_local int z;
  2618. }
  2619. int a;
  2620. </pre></td></tr>
  2621. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('hasGlobalStorage0')"><a name="hasGlobalStorage0Anchor">hasGlobalStorage</a></td><td></td></tr>
  2622. <tr><td colspan="4" class="doc" id="hasGlobalStorage0"><pre>Matches a variable declaration that does not have local storage.
  2623. Example matches y and z (matcher = varDecl(hasGlobalStorage())
  2624. void f() {
  2625. int x;
  2626. static int y;
  2627. }
  2628. int z;
  2629. </pre></td></tr>
  2630. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('hasLocalStorage0')"><a name="hasLocalStorage0Anchor">hasLocalStorage</a></td><td></td></tr>
  2631. <tr><td colspan="4" class="doc" id="hasLocalStorage0"><pre>Matches a variable declaration that has function scope and is a
  2632. non-static local variable.
  2633. Example matches x (matcher = varDecl(hasLocalStorage())
  2634. void f() {
  2635. int x;
  2636. static int y;
  2637. }
  2638. int z;
  2639. </pre></td></tr>
  2640. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('hasStaticStorageDuration0')"><a name="hasStaticStorageDuration0Anchor">hasStaticStorageDuration</a></td><td></td></tr>
  2641. <tr><td colspan="4" class="doc" id="hasStaticStorageDuration0"><pre>Matches a variable declaration that has static storage duration.
  2642. It includes the variable declared at namespace scope and those declared
  2643. with "static" and "extern" storage class specifiers.
  2644. void f() {
  2645. int x;
  2646. static int y;
  2647. thread_local int z;
  2648. }
  2649. int a;
  2650. static int b;
  2651. extern int c;
  2652. varDecl(hasStaticStorageDuration())
  2653. matches the function declaration y, a, b and c.
  2654. </pre></td></tr>
  2655. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('hasThreadStorageDuration0')"><a name="hasThreadStorageDuration0Anchor">hasThreadStorageDuration</a></td><td></td></tr>
  2656. <tr><td colspan="4" class="doc" id="hasThreadStorageDuration0"><pre>Matches a variable declaration that has thread storage duration.
  2657. Example matches z, but not x, z, or a.
  2658. (matcher = varDecl(hasThreadStorageDuration())
  2659. void f() {
  2660. int x;
  2661. static int y;
  2662. thread_local int z;
  2663. }
  2664. int a;
  2665. </pre></td></tr>
  2666. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isConstexpr0')"><a name="isConstexpr0Anchor">isConstexpr</a></td><td></td></tr>
  2667. <tr><td colspan="4" class="doc" id="isConstexpr0"><pre>Matches constexpr variable and function declarations.
  2668. Given:
  2669. constexpr int foo = 42;
  2670. constexpr int bar();
  2671. varDecl(isConstexpr())
  2672. matches the declaration of foo.
  2673. functionDecl(isConstexpr())
  2674. matches the declaration of bar.
  2675. </pre></td></tr>
  2676. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isDefinition1')"><a name="isDefinition1Anchor">isDefinition</a></td><td></td></tr>
  2677. <tr><td colspan="4" class="doc" id="isDefinition1"><pre>Matches if a declaration has a body attached.
  2678. Example matches A, va, fa
  2679. class A {};
  2680. class B; Doesn't match, as it has no body.
  2681. int va;
  2682. extern int vb; Doesn't match, as it doesn't define the variable.
  2683. void fa() {}
  2684. void fb(); Doesn't match, as it has no body.
  2685. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagDecl.html">TagDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;
  2686. </pre></td></tr>
  2687. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isExceptionVariable0')"><a name="isExceptionVariable0Anchor">isExceptionVariable</a></td><td></td></tr>
  2688. <tr><td colspan="4" class="doc" id="isExceptionVariable0"><pre>Matches a variable declaration that is an exception variable from
  2689. a C++ catch block, or an Objective-C statement.
  2690. Example matches x (matcher = varDecl(isExceptionVariable())
  2691. void f(int y) {
  2692. try {
  2693. } catch (int x) {
  2694. }
  2695. }
  2696. </pre></td></tr>
  2697. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isExplicitTemplateSpecialization1')"><a name="isExplicitTemplateSpecialization1Anchor">isExplicitTemplateSpecialization</a></td><td></td></tr>
  2698. <tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization1"><pre>Matches explicit template specializations of function, class, or
  2699. static member variable template instantiations.
  2700. Given
  2701. template&lt;typename T&gt; void A(T t) { }
  2702. template&lt;&gt; void A(int N) { }
  2703. functionDecl(isExplicitTemplateSpecialization())
  2704. matches the specialization A&lt;int&gt;().
  2705. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
  2706. </pre></td></tr>
  2707. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isExternC1')"><a name="isExternC1Anchor">isExternC</a></td><td></td></tr>
  2708. <tr><td colspan="4" class="doc" id="isExternC1"><pre>Matches extern "C" function or variable declarations.
  2709. Given:
  2710. extern "C" void f() {}
  2711. extern "C" { void g() {} }
  2712. void h() {}
  2713. extern "C" int x = 1;
  2714. extern "C" int y = 2;
  2715. int z = 3;
  2716. functionDecl(isExternC())
  2717. matches the declaration of f and g, but not the declaration of h.
  2718. varDecl(isExternC())
  2719. matches the declaration of x and y, but not the declaration of z.
  2720. </pre></td></tr>
  2721. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isStaticStorageClass1')"><a name="isStaticStorageClass1Anchor">isStaticStorageClass</a></td><td></td></tr>
  2722. <tr><td colspan="4" class="doc" id="isStaticStorageClass1"><pre>Matches variablefunction declarations that have "static" storage
  2723. class specifier ("static" keyword) written in the source.
  2724. Given:
  2725. static void f() {}
  2726. static int i = 0;
  2727. extern int j;
  2728. int k;
  2729. functionDecl(isStaticStorageClass())
  2730. matches the function declaration f.
  2731. varDecl(isStaticStorageClass())
  2732. matches the variable declaration i.
  2733. </pre></td></tr>
  2734. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isTemplateInstantiation1')"><a name="isTemplateInstantiation1Anchor">isTemplateInstantiation</a></td><td></td></tr>
  2735. <tr><td colspan="4" class="doc" id="isTemplateInstantiation1"><pre>Matches template instantiations of function, class, or static
  2736. member variable template instantiations.
  2737. Given
  2738. template &lt;typename T&gt; class X {}; class A {}; X&lt;A&gt; x;
  2739. or
  2740. template &lt;typename T&gt; class X {}; class A {}; template class X&lt;A&gt;;
  2741. cxxRecordDecl(hasName("::X"), isTemplateInstantiation())
  2742. matches the template instantiation of X&lt;A&gt;.
  2743. But given
  2744. template &lt;typename T&gt; class X {}; class A {};
  2745. template &lt;&gt; class X&lt;A&gt; {}; X&lt;A&gt; x;
  2746. cxxRecordDecl(hasName("::X"), isTemplateInstantiation())
  2747. does not match, as X&lt;A&gt; is an explicit template specialization.
  2748. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
  2749. </pre></td></tr>
  2750. <tr><td>Matcher&lt;internal::Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;&gt;</td><td class="name" onclick="toggle('isInstantiated0')"><a name="isInstantiated0Anchor">isInstantiated</a></td><td></td></tr>
  2751. <tr><td colspan="4" class="doc" id="isInstantiated0"><pre>Matches declarations that are template instantiations or are inside
  2752. template instantiations.
  2753. Given
  2754. template&lt;typename T&gt; void A(T t) { T i; }
  2755. A(0);
  2756. A(0U);
  2757. functionDecl(isInstantiated())
  2758. matches 'A(int) {...};' and 'A(unsigned) {...}'.
  2759. </pre></td></tr>
  2760. <tr><td>Matcher&lt;internal::Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;&gt;</td><td class="name" onclick="toggle('nullPointerConstant0')"><a name="nullPointerConstant0Anchor">nullPointerConstant</a></td><td></td></tr>
  2761. <tr><td colspan="4" class="doc" id="nullPointerConstant0"><pre>Matches expressions that resolve to a null pointer constant, such as
  2762. GNU's __null, C++11's nullptr, or C's NULL macro.
  2763. Given:
  2764. void *v1 = NULL;
  2765. void *v2 = nullptr;
  2766. void *v3 = __null; GNU extension
  2767. char *cp = (char *)0;
  2768. int *ip = 0;
  2769. int i = 0;
  2770. expr(nullPointerConstant())
  2771. matches the initializer for v1, v2, v3, cp, and ip. Does not match the
  2772. initializer for i.
  2773. </pre></td></tr>
  2774. <tr><td>Matcher&lt;internal::Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;&gt;</td><td class="name" onclick="toggle('hasAnyName0')"><a name="hasAnyName0Anchor">hasAnyName</a></td><td>StringRef, ..., StringRef</td></tr>
  2775. <tr><td colspan="4" class="doc" id="hasAnyName0"><pre>Matches NamedDecl nodes that have any of the specified names.
  2776. This matcher is only provided as a performance optimization of hasName.
  2777. hasAnyName(a, b, c)
  2778. is equivalent to, but faster than
  2779. anyOf(hasName(a), hasName(b), hasName(c))
  2780. </pre></td></tr>
  2781. <tr><td>Matcher&lt;internal::Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;&gt;</td><td class="name" onclick="toggle('isInTemplateInstantiation0')"><a name="isInTemplateInstantiation0Anchor">isInTemplateInstantiation</a></td><td></td></tr>
  2782. <tr><td colspan="4" class="doc" id="isInTemplateInstantiation0"><pre>Matches statements inside of a template instantiation.
  2783. Given
  2784. int j;
  2785. template&lt;typename T&gt; void A(T t) { T i; j += 42;}
  2786. A(0);
  2787. A(0U);
  2788. declStmt(isInTemplateInstantiation())
  2789. matches 'int i;' and 'unsigned i'.
  2790. unless(stmt(isInTemplateInstantiation()))
  2791. will NOT match j += 42; as it's shared between the template definition and
  2792. instantiation.
  2793. </pre></td></tr>
  2794. <!--END_NARROWING_MATCHERS -->
  2795. </table>
  2796. <!-- ======================================================================= -->
  2797. <h2 id="traversal-matchers">AST Traversal Matchers</h2>
  2798. <!-- ======================================================================= -->
  2799. <p>Traversal matchers specify the relationship to other nodes that are
  2800. reachable from the current node.</p>
  2801. <p>Note that there are special traversal matchers (has, hasDescendant, forEach and
  2802. forEachDescendant) which work on all nodes and allow users to write more generic
  2803. match expressions.</p>
  2804. <table>
  2805. <tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
  2806. <!-- START_TRAVERSAL_MATCHERS -->
  2807. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('eachOf0')"><a name="eachOf0Anchor">eachOf</a></td><td>Matcher&lt;*&gt;, ..., Matcher&lt;*&gt;</td></tr>
  2808. <tr><td colspan="4" class="doc" id="eachOf0"><pre>Matches if any of the given matchers matches.
  2809. Unlike anyOf, eachOf will generate a match result for each
  2810. matching submatcher.
  2811. For example, in:
  2812. class A { int a; int b; };
  2813. The matcher:
  2814. cxxRecordDecl(eachOf(has(fieldDecl(hasName("a")).bind("v")),
  2815. has(fieldDecl(hasName("b")).bind("v"))))
  2816. will generate two results binding "v", the first of which binds
  2817. the field declaration of a, the second the field declaration of
  2818. b.
  2819. Usable as: Any Matcher
  2820. </pre></td></tr>
  2821. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('forEachDescendant0')"><a name="forEachDescendant0Anchor">forEachDescendant</a></td><td>Matcher&lt;*&gt;</td></tr>
  2822. <tr><td colspan="4" class="doc" id="forEachDescendant0"><pre>Matches AST nodes that have descendant AST nodes that match the
  2823. provided matcher.
  2824. Example matches X, A, B, C
  2825. (matcher = cxxRecordDecl(forEachDescendant(cxxRecordDecl(hasName("X")))))
  2826. class X {}; Matches X, because X::X is a class of name X inside X.
  2827. class A { class X {}; };
  2828. class B { class C { class X {}; }; };
  2829. DescendantT must be an AST base type.
  2830. As opposed to 'hasDescendant', 'forEachDescendant' will cause a match for
  2831. each result that matches instead of only on the first one.
  2832. Note: Recursively combined ForEachDescendant can cause many matches:
  2833. cxxRecordDecl(forEachDescendant(cxxRecordDecl(
  2834. forEachDescendant(cxxRecordDecl())
  2835. )))
  2836. will match 10 times (plus injected class name matches) on:
  2837. class A { class B { class C { class D { class E {}; }; }; }; };
  2838. Usable as: Any Matcher
  2839. </pre></td></tr>
  2840. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('forEach0')"><a name="forEach0Anchor">forEach</a></td><td>Matcher&lt;*&gt;</td></tr>
  2841. <tr><td colspan="4" class="doc" id="forEach0"><pre>Matches AST nodes that have child AST nodes that match the
  2842. provided matcher.
  2843. Example matches X, Y
  2844. (matcher = cxxRecordDecl(forEach(cxxRecordDecl(hasName("X")))
  2845. class X {}; Matches X, because X::X is a class of name X inside X.
  2846. class Y { class X {}; };
  2847. class Z { class Y { class X {}; }; }; Does not match Z.
  2848. ChildT must be an AST base type.
  2849. As opposed to 'has', 'forEach' will cause a match for each result that
  2850. matches instead of only on the first one.
  2851. Usable as: Any Matcher
  2852. </pre></td></tr>
  2853. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('hasAncestor0')"><a name="hasAncestor0Anchor">hasAncestor</a></td><td>Matcher&lt;*&gt;</td></tr>
  2854. <tr><td colspan="4" class="doc" id="hasAncestor0"><pre>Matches AST nodes that have an ancestor that matches the provided
  2855. matcher.
  2856. Given
  2857. void f() { if (true) { int x = 42; } }
  2858. void g() { for (;;) { int x = 43; } }
  2859. expr(integerLiteral(hasAncestor(ifStmt()))) matches 42, but not 43.
  2860. Usable as: Any Matcher
  2861. </pre></td></tr>
  2862. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('hasDescendant0')"><a name="hasDescendant0Anchor">hasDescendant</a></td><td>Matcher&lt;*&gt;</td></tr>
  2863. <tr><td colspan="4" class="doc" id="hasDescendant0"><pre>Matches AST nodes that have descendant AST nodes that match the
  2864. provided matcher.
  2865. Example matches X, Y, Z
  2866. (matcher = cxxRecordDecl(hasDescendant(cxxRecordDecl(hasName("X")))))
  2867. class X {}; Matches X, because X::X is a class of name X inside X.
  2868. class Y { class X {}; };
  2869. class Z { class Y { class X {}; }; };
  2870. DescendantT must be an AST base type.
  2871. Usable as: Any Matcher
  2872. </pre></td></tr>
  2873. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('has0')"><a name="has0Anchor">has</a></td><td>Matcher&lt;*&gt;</td></tr>
  2874. <tr><td colspan="4" class="doc" id="has0"><pre>Matches AST nodes that have child AST nodes that match the
  2875. provided matcher.
  2876. Example matches X, Y
  2877. (matcher = cxxRecordDecl(has(cxxRecordDecl(hasName("X")))
  2878. class X {}; Matches X, because X::X is a class of name X inside X.
  2879. class Y { class X {}; };
  2880. class Z { class Y { class X {}; }; }; Does not match Z.
  2881. ChildT must be an AST base type.
  2882. Usable as: Any Matcher
  2883. Note that has is direct matcher, so it also matches things like implicit
  2884. casts and paren casts. If you are matching with expr then you should
  2885. probably consider using ignoringParenImpCasts like:
  2886. has(ignoringParenImpCasts(expr())).
  2887. </pre></td></tr>
  2888. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('hasParent0')"><a name="hasParent0Anchor">hasParent</a></td><td>Matcher&lt;*&gt;</td></tr>
  2889. <tr><td colspan="4" class="doc" id="hasParent0"><pre>Matches AST nodes that have a parent that matches the provided
  2890. matcher.
  2891. Given
  2892. void f() { for (;;) { int x = 42; if (true) { int x = 43; } } }
  2893. compoundStmt(hasParent(ifStmt())) matches "{ int x = 43; }".
  2894. Usable as: Any Matcher
  2895. </pre></td></tr>
  2896. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AbstractConditionalOperator.html">AbstractConditionalOperator</a>&gt;</td><td class="name" onclick="toggle('hasCondition5')"><a name="hasCondition5Anchor">hasCondition</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2897. <tr><td colspan="4" class="doc" id="hasCondition5"><pre>Matches the condition expression of an if statement, for loop,
  2898. switch statement or conditional operator.
  2899. Example matches true (matcher = hasCondition(cxxBoolLiteral(equals(true))))
  2900. if (true) {}
  2901. </pre></td></tr>
  2902. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AbstractConditionalOperator.html">AbstractConditionalOperator</a>&gt;</td><td class="name" onclick="toggle('hasFalseExpression0')"><a name="hasFalseExpression0Anchor">hasFalseExpression</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2903. <tr><td colspan="4" class="doc" id="hasFalseExpression0"><pre>Matches the false branch expression of a conditional operator
  2904. (binary or ternary).
  2905. Example matches b
  2906. condition ? a : b
  2907. condition ?: b
  2908. </pre></td></tr>
  2909. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AbstractConditionalOperator.html">AbstractConditionalOperator</a>&gt;</td><td class="name" onclick="toggle('hasTrueExpression0')"><a name="hasTrueExpression0Anchor">hasTrueExpression</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2910. <tr><td colspan="4" class="doc" id="hasTrueExpression0"><pre>Matches the true branch expression of a conditional operator.
  2911. Example 1 (conditional ternary operator): matches a
  2912. condition ? a : b
  2913. Example 2 (conditional binary operator): matches opaqueValueExpr(condition)
  2914. condition ?: b
  2915. </pre></td></tr>
  2916. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration15')"><a name="hasDeclaration15Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2917. <tr><td colspan="4" class="doc" id="hasDeclaration15"><pre>Matches a node if the declaration associated with that node
  2918. matches the given matcher.
  2919. The associated declaration is:
  2920. - for type nodes, the declaration of the underlying type
  2921. - for CallExpr, the declaration of the callee
  2922. - for MemberExpr, the declaration of the referenced member
  2923. - for CXXConstructExpr, the declaration of the constructor
  2924. - for CXXNewExpr, the declaration of the operator new
  2925. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2926. function. e.g. various subtypes of clang::Type and various expressions.
  2927. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  2928. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  2929. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  2930. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  2931. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  2932. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  2933. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  2934. </pre></td></tr>
  2935. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ArraySubscriptExpr.html">ArraySubscriptExpr</a>&gt;</td><td class="name" onclick="toggle('hasBase0')"><a name="hasBase0Anchor">hasBase</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2936. <tr><td colspan="4" class="doc" id="hasBase0"><pre>Matches the base expression of an array subscript expression.
  2937. Given
  2938. int i[5];
  2939. void f() { i[1] = 42; }
  2940. arraySubscriptExpression(hasBase(implicitCastExpr(
  2941. hasSourceExpression(declRefExpr()))))
  2942. matches i[1] with the declRefExpr() matching i
  2943. </pre></td></tr>
  2944. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ArraySubscriptExpr.html">ArraySubscriptExpr</a>&gt;</td><td class="name" onclick="toggle('hasIndex0')"><a name="hasIndex0Anchor">hasIndex</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2945. <tr><td colspan="4" class="doc" id="hasIndex0"><pre>Matches the index expression of an array subscript expression.
  2946. Given
  2947. int i[5];
  2948. void f() { i[1] = 42; }
  2949. arraySubscriptExpression(hasIndex(integerLiteral()))
  2950. matches i[1] with the integerLiteral() matching 1
  2951. </pre></td></tr>
  2952. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ArraySubscriptExpr.html">ArraySubscriptExpr</a>&gt;</td><td class="name" onclick="toggle('hasLHS1')"><a name="hasLHS1Anchor">hasLHS</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2953. <tr><td colspan="4" class="doc" id="hasLHS1"><pre>Matches the left hand side of binary operator expressions.
  2954. Example matches a (matcher = binaryOperator(hasLHS()))
  2955. a || b
  2956. </pre></td></tr>
  2957. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ArraySubscriptExpr.html">ArraySubscriptExpr</a>&gt;</td><td class="name" onclick="toggle('hasRHS1')"><a name="hasRHS1Anchor">hasRHS</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2958. <tr><td colspan="4" class="doc" id="hasRHS1"><pre>Matches the right hand side of binary operator expressions.
  2959. Example matches b (matcher = binaryOperator(hasRHS()))
  2960. a || b
  2961. </pre></td></tr>
  2962. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayTypeLoc.html">ArrayTypeLoc</a>&gt;</td><td class="name" onclick="toggle('hasElementTypeLoc0')"><a name="hasElementTypeLoc0Anchor">hasElementTypeLoc</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
  2963. <tr><td colspan="4" class="doc" id="hasElementTypeLoc0"><pre>Matches arrays and C99 complex types that have a specific element
  2964. type.
  2965. Given
  2966. struct A {};
  2967. A a[7];
  2968. int b[7];
  2969. arrayType(hasElementType(builtinType()))
  2970. matches "int b[7]"
  2971. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;
  2972. </pre></td></tr>
  2973. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;</td><td class="name" onclick="toggle('hasElementType0')"><a name="hasElementType0Anchor">hasElementType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  2974. <tr><td colspan="4" class="doc" id="hasElementType0"><pre>Matches arrays and C99 complex types that have a specific element
  2975. type.
  2976. Given
  2977. struct A {};
  2978. A a[7];
  2979. int b[7];
  2980. arrayType(hasElementType(builtinType()))
  2981. matches "int b[7]"
  2982. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;
  2983. </pre></td></tr>
  2984. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicTypeLoc.html">AtomicTypeLoc</a>&gt;</td><td class="name" onclick="toggle('hasValueTypeLoc0')"><a name="hasValueTypeLoc0Anchor">hasValueTypeLoc</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
  2985. <tr><td colspan="4" class="doc" id="hasValueTypeLoc0"><pre>Matches atomic types with a specific value type.
  2986. Given
  2987. _Atomic(int) i;
  2988. _Atomic(float) f;
  2989. atomicType(hasValueType(isInteger()))
  2990. matches "_Atomic(int) i"
  2991. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicType.html">AtomicType</a>&gt;
  2992. </pre></td></tr>
  2993. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicType.html">AtomicType</a>&gt;</td><td class="name" onclick="toggle('hasValueType0')"><a name="hasValueType0Anchor">hasValueType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  2994. <tr><td colspan="4" class="doc" id="hasValueType0"><pre>Matches atomic types with a specific value type.
  2995. Given
  2996. _Atomic(int) i;
  2997. _Atomic(float) f;
  2998. atomicType(hasValueType(isInteger()))
  2999. matches "_Atomic(int) i"
  3000. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicType.html">AtomicType</a>&gt;
  3001. </pre></td></tr>
  3002. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AutoType.html">AutoType</a>&gt;</td><td class="name" onclick="toggle('hasDeducedType0')"><a name="hasDeducedType0Anchor">hasDeducedType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  3003. <tr><td colspan="4" class="doc" id="hasDeducedType0"><pre>Matches AutoType nodes where the deduced type is a specific type.
  3004. Note: There is no TypeLoc for the deduced type and thus no
  3005. getDeducedLoc() matcher.
  3006. Given
  3007. auto a = 1;
  3008. auto b = 2.0;
  3009. autoType(hasDeducedType(isInteger()))
  3010. matches "auto a"
  3011. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AutoType.html">AutoType</a>&gt;
  3012. </pre></td></tr>
  3013. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasEitherOperand0')"><a name="hasEitherOperand0Anchor">hasEitherOperand</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3014. <tr><td colspan="4" class="doc" id="hasEitherOperand0"><pre>Matches if either the left hand side or the right hand side of a
  3015. binary operator matches.
  3016. </pre></td></tr>
  3017. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasLHS0')"><a name="hasLHS0Anchor">hasLHS</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3018. <tr><td colspan="4" class="doc" id="hasLHS0"><pre>Matches the left hand side of binary operator expressions.
  3019. Example matches a (matcher = binaryOperator(hasLHS()))
  3020. a || b
  3021. </pre></td></tr>
  3022. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasRHS0')"><a name="hasRHS0Anchor">hasRHS</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3023. <tr><td colspan="4" class="doc" id="hasRHS0"><pre>Matches the right hand side of binary operator expressions.
  3024. Example matches b (matcher = binaryOperator(hasRHS()))
  3025. a || b
  3026. </pre></td></tr>
  3027. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerTypeLoc.html">BlockPointerTypeLoc</a>&gt;</td><td class="name" onclick="toggle('pointeeLoc0')"><a name="pointeeLoc0Anchor">pointeeLoc</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
  3028. <tr><td colspan="4" class="doc" id="pointeeLoc0"><pre>Narrows PointerType (and similar) matchers to those where the
  3029. pointee matches a given matcher.
  3030. Given
  3031. int *a;
  3032. int const *b;
  3033. float const *f;
  3034. pointerType(pointee(isConstQualified(), isInteger()))
  3035. matches "int const *b"
  3036. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  3037. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  3038. </pre></td></tr>
  3039. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;</td><td class="name" onclick="toggle('pointee0')"><a name="pointee0Anchor">pointee</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  3040. <tr><td colspan="4" class="doc" id="pointee0"><pre>Narrows PointerType (and similar) matchers to those where the
  3041. pointee matches a given matcher.
  3042. Given
  3043. int *a;
  3044. int const *b;
  3045. float const *f;
  3046. pointerType(pointee(isConstQualified(), isInteger()))
  3047. matches "int const *b"
  3048. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  3049. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  3050. </pre></td></tr>
  3051. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('forEachArgumentWithParam1')"><a name="forEachArgumentWithParam1Anchor">forEachArgumentWithParam</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; ArgMatcher, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html">ParmVarDecl</a>&gt; ParamMatcher</td></tr>
  3052. <tr><td colspan="4" class="doc" id="forEachArgumentWithParam1"><pre>Matches all arguments and their respective ParmVarDecl.
  3053. Given
  3054. void f(int i);
  3055. int y;
  3056. f(y);
  3057. callExpr(
  3058. forEachArgumentWithParam(
  3059. declRefExpr(to(varDecl(hasName("y")))),
  3060. parmVarDecl(hasType(isInteger()))
  3061. ))
  3062. matches f(y);
  3063. with declRefExpr(...)
  3064. matching int y
  3065. and parmVarDecl(...)
  3066. matching int i
  3067. </pre></td></tr>
  3068. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('hasAnyArgument1')"><a name="hasAnyArgument1Anchor">hasAnyArgument</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3069. <tr><td colspan="4" class="doc" id="hasAnyArgument1"><pre>Matches any argument of a call expression or a constructor call
  3070. expression.
  3071. Given
  3072. void x(int, int, int) { int y; x(1, y, 42); }
  3073. callExpr(hasAnyArgument(declRefExpr()))
  3074. matches x(1, y, 42)
  3075. with hasAnyArgument(...)
  3076. matching y
  3077. </pre></td></tr>
  3078. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('hasArgument1')"><a name="hasArgument1Anchor">hasArgument</a></td><td>unsigned N, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3079. <tr><td colspan="4" class="doc" id="hasArgument1"><pre>Matches the n'th argument of a call expression or a constructor
  3080. call expression.
  3081. Example matches y in x(y)
  3082. (matcher = callExpr(hasArgument(0, declRefExpr())))
  3083. void x(int) { int y; x(y); }
  3084. </pre></td></tr>
  3085. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration13')"><a name="hasDeclaration13Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3086. <tr><td colspan="4" class="doc" id="hasDeclaration13"><pre>Matches a node if the declaration associated with that node
  3087. matches the given matcher.
  3088. The associated declaration is:
  3089. - for type nodes, the declaration of the underlying type
  3090. - for CallExpr, the declaration of the callee
  3091. - for MemberExpr, the declaration of the referenced member
  3092. - for CXXConstructExpr, the declaration of the constructor
  3093. - for CXXNewExpr, the declaration of the operator new
  3094. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  3095. function. e.g. various subtypes of clang::Type and various expressions.
  3096. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  3097. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  3098. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  3099. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  3100. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  3101. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  3102. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  3103. </pre></td></tr>
  3104. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>&gt;</td><td class="name" onclick="toggle('forEachConstructorInitializer0')"><a name="forEachConstructorInitializer0Anchor">forEachConstructorInitializer</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt; InnerMatcher</td></tr>
  3105. <tr><td colspan="4" class="doc" id="forEachConstructorInitializer0"><pre>Matches each constructor initializer in a constructor definition.
  3106. Given
  3107. class A { A() : i(42), j(42) {} int i; int j; };
  3108. cxxConstructorDecl(forEachConstructorInitializer(
  3109. forField(decl().bind("x"))
  3110. ))
  3111. will trigger two matches, binding for 'i' and 'j' respectively.
  3112. </pre></td></tr>
  3113. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>&gt;</td><td class="name" onclick="toggle('hasAnyConstructorInitializer0')"><a name="hasAnyConstructorInitializer0Anchor">hasAnyConstructorInitializer</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt; InnerMatcher</td></tr>
  3114. <tr><td colspan="4" class="doc" id="hasAnyConstructorInitializer0"><pre>Matches a constructor initializer.
  3115. Given
  3116. struct Foo {
  3117. Foo() : foo_(1) { }
  3118. int foo_;
  3119. };
  3120. cxxRecordDecl(has(cxxConstructorDecl(
  3121. hasAnyConstructorInitializer(anything())
  3122. )))
  3123. record matches Foo, hasAnyConstructorInitializer matches foo_(1)
  3124. </pre></td></tr>
  3125. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;</td><td class="name" onclick="toggle('forField0')"><a name="forField0Anchor">forField</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FieldDecl.html">FieldDecl</a>&gt; InnerMatcher</td></tr>
  3126. <tr><td colspan="4" class="doc" id="forField0"><pre>Matches the field declaration of a constructor initializer.
  3127. Given
  3128. struct Foo {
  3129. Foo() : foo_(1) { }
  3130. int foo_;
  3131. };
  3132. cxxRecordDecl(has(cxxConstructorDecl(hasAnyConstructorInitializer(
  3133. forField(hasName("foo_"))))))
  3134. matches Foo
  3135. with forField matching foo_
  3136. </pre></td></tr>
  3137. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;</td><td class="name" onclick="toggle('withInitializer0')"><a name="withInitializer0Anchor">withInitializer</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3138. <tr><td colspan="4" class="doc" id="withInitializer0"><pre>Matches the initializer expression of a constructor initializer.
  3139. Given
  3140. struct Foo {
  3141. Foo() : foo_(1) { }
  3142. int foo_;
  3143. };
  3144. cxxRecordDecl(has(cxxConstructorDecl(hasAnyConstructorInitializer(
  3145. withInitializer(integerLiteral(equals(1)))))))
  3146. matches Foo
  3147. with withInitializer matching (1)
  3148. </pre></td></tr>
  3149. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a>&gt;</td><td class="name" onclick="toggle('hasBody3')"><a name="hasBody3Anchor">hasBody</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  3150. <tr><td colspan="4" class="doc" id="hasBody3"><pre>Matches a 'for', 'while', 'do while' statement or a function
  3151. definition that has a given body.
  3152. Given
  3153. for (;;) {}
  3154. hasBody(compoundStmt())
  3155. matches 'for (;;) {}'
  3156. with compoundStmt()
  3157. matching '{}'
  3158. </pre></td></tr>
  3159. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a>&gt;</td><td class="name" onclick="toggle('hasLoopVariable0')"><a name="hasLoopVariable0Anchor">hasLoopVariable</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt; InnerMatcher</td></tr>
  3160. <tr><td colspan="4" class="doc" id="hasLoopVariable0"><pre>Matches the initialization statement of a for loop.
  3161. Example:
  3162. forStmt(hasLoopVariable(anything()))
  3163. matches 'int x' in
  3164. for (int x : a) { }
  3165. </pre></td></tr>
  3166. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a>&gt;</td><td class="name" onclick="toggle('hasRangeInit0')"><a name="hasRangeInit0Anchor">hasRangeInit</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3167. <tr><td colspan="4" class="doc" id="hasRangeInit0"><pre>Matches the range initialization statement of a for loop.
  3168. Example:
  3169. forStmt(hasRangeInit(anything()))
  3170. matches 'a' in
  3171. for (int x : a) { }
  3172. </pre></td></tr>
  3173. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;</td><td class="name" onclick="toggle('onImplicitObjectArgument0')"><a name="onImplicitObjectArgument0Anchor">onImplicitObjectArgument</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3174. <tr><td colspan="4" class="doc" id="onImplicitObjectArgument0"><pre></pre></td></tr>
  3175. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;</td><td class="name" onclick="toggle('on0')"><a name="on0Anchor">on</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3176. <tr><td colspan="4" class="doc" id="on0"><pre>Matches on the implicit object argument of a member call expression.
  3177. Example matches y.x()
  3178. (matcher = cxxMemberCallExpr(on(hasType(cxxRecordDecl(hasName("Y"))))))
  3179. class Y { public: void x(); };
  3180. void z() { Y y; y.x(); }",
  3181. FIXME: Overload to allow directly matching types?
  3182. </pre></td></tr>
  3183. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;</td><td class="name" onclick="toggle('thisPointerType1')"><a name="thisPointerType1Anchor">thisPointerType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3184. <tr><td colspan="4" class="doc" id="thisPointerType1"><pre>Overloaded to match the type's declaration.
  3185. </pre></td></tr>
  3186. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;</td><td class="name" onclick="toggle('thisPointerType0')"><a name="thisPointerType0Anchor">thisPointerType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  3187. <tr><td colspan="4" class="doc" id="thisPointerType0"><pre>Matches if the expression's type either matches the specified
  3188. matcher, or is a pointer to a type that matches the InnerMatcher.
  3189. </pre></td></tr>
  3190. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('forEachOverridden0')"><a name="forEachOverridden0Anchor">forEachOverridden</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt; InnerMatcher</td></tr>
  3191. <tr><td colspan="4" class="doc" id="forEachOverridden0"><pre>Matches each method overriden by the given method. This matcher may
  3192. produce multiple matches.
  3193. Given
  3194. class A { virtual void f(); };
  3195. class B : public A { void f(); };
  3196. class C : public B { void f(); };
  3197. cxxMethodDecl(ofClass(hasName("C")),
  3198. forEachOverridden(cxxMethodDecl().bind("b"))).bind("d")
  3199. matches once, with "b" binding "A::f" and "d" binding "C::f" (Note
  3200. that B::f is not overridden by C::f).
  3201. The check can produce multiple matches in case of multiple inheritance, e.g.
  3202. class A1 { virtual void f(); };
  3203. class A2 { virtual void f(); };
  3204. class C : public A1, public A2 { void f(); };
  3205. cxxMethodDecl(ofClass(hasName("C")),
  3206. forEachOverridden(cxxMethodDecl().bind("b"))).bind("d")
  3207. matches twice, once with "b" binding "A1::f" and "d" binding "C::f", and
  3208. once with "b" binding "A2::f" and "d" binding "C::f".
  3209. </pre></td></tr>
  3210. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('ofClass0')"><a name="ofClass0Anchor">ofClass</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt; InnerMatcher</td></tr>
  3211. <tr><td colspan="4" class="doc" id="ofClass0"><pre>Matches the class declaration that the given method declaration
  3212. belongs to.
  3213. FIXME: Generalize this for other kinds of declarations.
  3214. FIXME: What other kind of declarations would we need to generalize
  3215. this to?
  3216. Example matches A() in the last line
  3217. (matcher = cxxConstructExpr(hasDeclaration(cxxMethodDecl(
  3218. ofClass(hasName("A"))))))
  3219. class A {
  3220. public:
  3221. A();
  3222. };
  3223. A a = A();
  3224. </pre></td></tr>
  3225. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration12')"><a name="hasDeclaration12Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3226. <tr><td colspan="4" class="doc" id="hasDeclaration12"><pre>Matches a node if the declaration associated with that node
  3227. matches the given matcher.
  3228. The associated declaration is:
  3229. - for type nodes, the declaration of the underlying type
  3230. - for CallExpr, the declaration of the callee
  3231. - for MemberExpr, the declaration of the referenced member
  3232. - for CXXConstructExpr, the declaration of the constructor
  3233. - for CXXNewExpr, the declaration of the operator new
  3234. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  3235. function. e.g. various subtypes of clang::Type and various expressions.
  3236. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  3237. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  3238. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  3239. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  3240. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  3241. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  3242. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  3243. </pre></td></tr>
  3244. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('hasMethod0')"><a name="hasMethod0Anchor">hasMethod</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt; InnerMatcher</td></tr>
  3245. <tr><td colspan="4" class="doc" id="hasMethod0"><pre>Matches the first method of a class or struct that satisfies InnerMatcher.
  3246. Given:
  3247. class A { void func(); };
  3248. class B { void member(); };
  3249. cxxRecordDecl(hasMethod(hasName("func"))) matches the declaration of
  3250. A but not B.
  3251. </pre></td></tr>
  3252. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isDerivedFrom0')"><a name="isDerivedFrom0Anchor">isDerivedFrom</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt; Base</td></tr>
  3253. <tr><td colspan="4" class="doc" id="isDerivedFrom0"><pre>Matches C++ classes that are directly or indirectly derived from
  3254. a class matching Base.
  3255. Note that a class is not considered to be derived from itself.
  3256. Example matches Y, Z, C (Base == hasName("X"))
  3257. class X;
  3258. class Y : public X {}; directly derived
  3259. class Z : public Y {}; indirectly derived
  3260. typedef X A;
  3261. typedef A B;
  3262. class C : public B {}; derived from a typedef of X
  3263. In the following example, Bar matches isDerivedFrom(hasName("X")):
  3264. class Foo;
  3265. typedef Foo X;
  3266. class Bar : public Foo {}; derived from a type that X is a typedef of
  3267. </pre></td></tr>
  3268. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isSameOrDerivedFrom0')"><a name="isSameOrDerivedFrom0Anchor">isSameOrDerivedFrom</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt; Base</td></tr>
  3269. <tr><td colspan="4" class="doc" id="isSameOrDerivedFrom0"><pre>Similar to isDerivedFrom(), but also matches classes that directly
  3270. match Base.
  3271. </pre></td></tr>
  3272. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('callee1')"><a name="callee1Anchor">callee</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3273. <tr><td colspan="4" class="doc" id="callee1"><pre>Matches if the call expression's callee's declaration matches the
  3274. given matcher.
  3275. Example matches y.x() (matcher = callExpr(callee(
  3276. cxxMethodDecl(hasName("x")))))
  3277. class Y { public: void x(); };
  3278. void z() { Y y; y.x(); }
  3279. </pre></td></tr>
  3280. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('callee0')"><a name="callee0Anchor">callee</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  3281. <tr><td colspan="4" class="doc" id="callee0"><pre>Matches if the call expression's callee expression matches.
  3282. Given
  3283. class Y { void x() { this-&gt;x(); x(); Y y; y.x(); } };
  3284. void f() { f(); }
  3285. callExpr(callee(expr()))
  3286. matches this-&gt;x(), x(), y.x(), f()
  3287. with callee(...)
  3288. matching this-&gt;x, x, y.x, f respectively
  3289. Note: Callee cannot take the more general internal::Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;
  3290. because this introduces ambiguous overloads with calls to Callee taking a
  3291. internal::Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, as the matcher hierarchy is purely
  3292. implemented in terms of implicit casts.
  3293. </pre></td></tr>
  3294. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('forEachArgumentWithParam0')"><a name="forEachArgumentWithParam0Anchor">forEachArgumentWithParam</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; ArgMatcher, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html">ParmVarDecl</a>&gt; ParamMatcher</td></tr>
  3295. <tr><td colspan="4" class="doc" id="forEachArgumentWithParam0"><pre>Matches all arguments and their respective ParmVarDecl.
  3296. Given
  3297. void f(int i);
  3298. int y;
  3299. f(y);
  3300. callExpr(
  3301. forEachArgumentWithParam(
  3302. declRefExpr(to(varDecl(hasName("y")))),
  3303. parmVarDecl(hasType(isInteger()))
  3304. ))
  3305. matches f(y);
  3306. with declRefExpr(...)
  3307. matching int y
  3308. and parmVarDecl(...)
  3309. matching int i
  3310. </pre></td></tr>
  3311. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('hasAnyArgument0')"><a name="hasAnyArgument0Anchor">hasAnyArgument</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3312. <tr><td colspan="4" class="doc" id="hasAnyArgument0"><pre>Matches any argument of a call expression or a constructor call
  3313. expression.
  3314. Given
  3315. void x(int, int, int) { int y; x(1, y, 42); }
  3316. callExpr(hasAnyArgument(declRefExpr()))
  3317. matches x(1, y, 42)
  3318. with hasAnyArgument(...)
  3319. matching y
  3320. </pre></td></tr>
  3321. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('hasArgument0')"><a name="hasArgument0Anchor">hasArgument</a></td><td>unsigned N, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3322. <tr><td colspan="4" class="doc" id="hasArgument0"><pre>Matches the n'th argument of a call expression or a constructor
  3323. call expression.
  3324. Example matches y in x(y)
  3325. (matcher = callExpr(hasArgument(0, declRefExpr())))
  3326. void x(int) { int y; x(y); }
  3327. </pre></td></tr>
  3328. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration14')"><a name="hasDeclaration14Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3329. <tr><td colspan="4" class="doc" id="hasDeclaration14"><pre>Matches a node if the declaration associated with that node
  3330. matches the given matcher.
  3331. The associated declaration is:
  3332. - for type nodes, the declaration of the underlying type
  3333. - for CallExpr, the declaration of the callee
  3334. - for MemberExpr, the declaration of the referenced member
  3335. - for CXXConstructExpr, the declaration of the constructor
  3336. - for CXXNewExpr, the declaration of the operator new
  3337. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  3338. function. e.g. various subtypes of clang::Type and various expressions.
  3339. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  3340. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  3341. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  3342. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  3343. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  3344. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  3345. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  3346. </pre></td></tr>
  3347. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CaseStmt.html">CaseStmt</a>&gt;</td><td class="name" onclick="toggle('hasCaseConstant0')"><a name="hasCaseConstant0Anchor">hasCaseConstant</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3348. <tr><td colspan="4" class="doc" id="hasCaseConstant0"><pre>If the given case statement does not use the GNU case range
  3349. extension, matches the constant given in the statement.
  3350. Given
  3351. switch (1) { case 1: case 1+1: case 3 ... 4: ; }
  3352. caseStmt(hasCaseConstant(integerLiteral()))
  3353. matches "case 1:"
  3354. </pre></td></tr>
  3355. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CastExpr.html">CastExpr</a>&gt;</td><td class="name" onclick="toggle('hasSourceExpression0')"><a name="hasSourceExpression0Anchor">hasSourceExpression</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3356. <tr><td colspan="4" class="doc" id="hasSourceExpression0"><pre></pre></td></tr>
  3357. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>&gt;</td><td class="name" onclick="toggle('hasAnyTemplateArgument0')"><a name="hasAnyTemplateArgument0Anchor">hasAnyTemplateArgument</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt; InnerMatcher</td></tr>
  3358. <tr><td colspan="4" class="doc" id="hasAnyTemplateArgument0"><pre>Matches classTemplateSpecializations, templateSpecializationType and
  3359. functionDecl that have at least one TemplateArgument matching the given
  3360. InnerMatcher.
  3361. Given
  3362. template&lt;typename T&gt; class A {};
  3363. template&lt;&gt; class A&lt;double&gt; {};
  3364. A&lt;int&gt; a;
  3365. template&lt;typename T&gt; f() {};
  3366. void func() { f&lt;int&gt;(); };
  3367. classTemplateSpecializationDecl(hasAnyTemplateArgument(
  3368. refersToType(asString("int"))))
  3369. matches the specialization A&lt;int&gt;
  3370. functionDecl(hasAnyTemplateArgument(refersToType(asString("int"))))
  3371. matches the specialization f&lt;int&gt;
  3372. </pre></td></tr>
  3373. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>&gt;</td><td class="name" onclick="toggle('hasSpecializedTemplate0')"><a name="hasSpecializedTemplate0Anchor">hasSpecializedTemplate</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateDecl.html">ClassTemplateDecl</a>&gt; InnerMatcher</td></tr>
  3374. <tr><td colspan="4" class="doc" id="hasSpecializedTemplate0"><pre>Matches the specialized template of a specialization declaration.
  3375. Given
  3376. tempalate&lt;typename T&gt; class A {};
  3377. typedef A&lt;int&gt; B;
  3378. classTemplateSpecializationDecl(hasSpecializedTemplate(classTemplateDecl()))
  3379. matches 'B' with classTemplateDecl() matching the class template
  3380. declaration of 'A'.
  3381. </pre></td></tr>
  3382. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>&gt;</td><td class="name" onclick="toggle('hasTemplateArgument0')"><a name="hasTemplateArgument0Anchor">hasTemplateArgument</a></td><td>unsigned N, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt; InnerMatcher</td></tr>
  3383. <tr><td colspan="4" class="doc" id="hasTemplateArgument0"><pre>Matches classTemplateSpecializations, templateSpecializationType and
  3384. functionDecl where the n'th TemplateArgument matches the given InnerMatcher.
  3385. Given
  3386. template&lt;typename T, typename U&gt; class A {};
  3387. A&lt;bool, int&gt; b;
  3388. A&lt;int, bool&gt; c;
  3389. template&lt;typename T&gt; f() {};
  3390. void func() { f&lt;int&gt;(); };
  3391. classTemplateSpecializationDecl(hasTemplateArgument(
  3392. 1, refersToType(asString("int"))))
  3393. matches the specialization A&lt;bool, int&gt;
  3394. functionDecl(hasTemplateArgument(0, refersToType(asString("int"))))
  3395. matches the specialization f&lt;int&gt;
  3396. </pre></td></tr>
  3397. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexTypeLoc.html">ComplexTypeLoc</a>&gt;</td><td class="name" onclick="toggle('hasElementTypeLoc1')"><a name="hasElementTypeLoc1Anchor">hasElementTypeLoc</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
  3398. <tr><td colspan="4" class="doc" id="hasElementTypeLoc1"><pre>Matches arrays and C99 complex types that have a specific element
  3399. type.
  3400. Given
  3401. struct A {};
  3402. A a[7];
  3403. int b[7];
  3404. arrayType(hasElementType(builtinType()))
  3405. matches "int b[7]"
  3406. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;
  3407. </pre></td></tr>
  3408. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;</td><td class="name" onclick="toggle('hasElementType1')"><a name="hasElementType1Anchor">hasElementType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  3409. <tr><td colspan="4" class="doc" id="hasElementType1"><pre>Matches arrays and C99 complex types that have a specific element
  3410. type.
  3411. Given
  3412. struct A {};
  3413. A a[7];
  3414. int b[7];
  3415. arrayType(hasElementType(builtinType()))
  3416. matches "int b[7]"
  3417. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;
  3418. </pre></td></tr>
  3419. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CompoundStmt.html">CompoundStmt</a>&gt;</td><td class="name" onclick="toggle('hasAnySubstatement0')"><a name="hasAnySubstatement0Anchor">hasAnySubstatement</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  3420. <tr><td colspan="4" class="doc" id="hasAnySubstatement0"><pre>Matches compound statements where at least one substatement matches
  3421. a given matcher. Also matches StmtExprs that have CompoundStmt as children.
  3422. Given
  3423. { {}; 1+2; }
  3424. hasAnySubstatement(compoundStmt())
  3425. matches '{ {}; 1+2; }'
  3426. with compoundStmt()
  3427. matching '{}'
  3428. </pre></td></tr>
  3429. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DecayedType.html">DecayedType</a>&gt;</td><td class="name" onclick="toggle('hasDecayedType0')"><a name="hasDecayedType0Anchor">hasDecayedType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerType</td></tr>
  3430. <tr><td colspan="4" class="doc" id="hasDecayedType0"><pre>Matches the decayed type, whos decayed type matches InnerMatcher
  3431. </pre></td></tr>
  3432. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration11')"><a name="hasDeclaration11Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3433. <tr><td colspan="4" class="doc" id="hasDeclaration11"><pre>Matches a node if the declaration associated with that node
  3434. matches the given matcher.
  3435. The associated declaration is:
  3436. - for type nodes, the declaration of the underlying type
  3437. - for CallExpr, the declaration of the callee
  3438. - for MemberExpr, the declaration of the referenced member
  3439. - for CXXConstructExpr, the declaration of the constructor
  3440. - for CXXNewExpr, the declaration of the operator new
  3441. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  3442. function. e.g. various subtypes of clang::Type and various expressions.
  3443. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  3444. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  3445. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  3446. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  3447. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  3448. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  3449. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  3450. </pre></td></tr>
  3451. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;</td><td class="name" onclick="toggle('throughUsingDecl0')"><a name="throughUsingDecl0Anchor">throughUsingDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingShadowDecl.html">UsingShadowDecl</a>&gt; InnerMatcher</td></tr>
  3452. <tr><td colspan="4" class="doc" id="throughUsingDecl0"><pre>Matches a DeclRefExpr that refers to a declaration through a
  3453. specific using shadow declaration.
  3454. Given
  3455. namespace a { void f() {} }
  3456. using a::f;
  3457. void g() {
  3458. f(); Matches this ..
  3459. a::f(); .. but not this.
  3460. }
  3461. declRefExpr(throughUsingDecl(anything()))
  3462. matches f()
  3463. </pre></td></tr>
  3464. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;</td><td class="name" onclick="toggle('to0')"><a name="to0Anchor">to</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3465. <tr><td colspan="4" class="doc" id="to0"><pre>Matches a DeclRefExpr that refers to a declaration that matches the
  3466. specified matcher.
  3467. Example matches x in if(x)
  3468. (matcher = declRefExpr(to(varDecl(hasName("x")))))
  3469. bool x;
  3470. if (x) {}
  3471. </pre></td></tr>
  3472. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt;</td><td class="name" onclick="toggle('containsDeclaration0')"><a name="containsDeclaration0Anchor">containsDeclaration</a></td><td>unsigned N, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3473. <tr><td colspan="4" class="doc" id="containsDeclaration0"><pre>Matches the n'th declaration of a declaration statement.
  3474. Note that this does not work for global declarations because the AST
  3475. breaks up multiple-declaration DeclStmt's into multiple single-declaration
  3476. DeclStmt's.
  3477. Example: Given non-global declarations
  3478. int a, b = 0;
  3479. int c;
  3480. int d = 2, e;
  3481. declStmt(containsDeclaration(
  3482. 0, varDecl(hasInitializer(anything()))))
  3483. matches only 'int d = 2, e;', and
  3484. declStmt(containsDeclaration(1, varDecl()))
  3485. matches 'int a, b = 0' as well as 'int d = 2, e;'
  3486. but 'int c;' is not matched.
  3487. </pre></td></tr>
  3488. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt;</td><td class="name" onclick="toggle('hasSingleDecl0')"><a name="hasSingleDecl0Anchor">hasSingleDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3489. <tr><td colspan="4" class="doc" id="hasSingleDecl0"><pre>Matches the Decl of a DeclStmt which has a single declaration.
  3490. Given
  3491. int a, b;
  3492. int c;
  3493. declStmt(hasSingleDecl(anything()))
  3494. matches 'int c;' but not 'int a, b;'.
  3495. </pre></td></tr>
  3496. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>&gt;</td><td class="name" onclick="toggle('hasTypeLoc0')"><a name="hasTypeLoc0Anchor">hasTypeLoc</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt; Inner</td></tr>
  3497. <tr><td colspan="4" class="doc" id="hasTypeLoc0"><pre>Matches if the type location of the declarator decl's type matches
  3498. the inner matcher.
  3499. Given
  3500. int x;
  3501. declaratorDecl(hasTypeLoc(loc(asString("int"))))
  3502. matches int x
  3503. </pre></td></tr>
  3504. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('hasDeclContext0')"><a name="hasDeclContext0Anchor">hasDeclContext</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3505. <tr><td colspan="4" class="doc" id="hasDeclContext0"><pre>Matches declarations whose declaration context, interpreted as a
  3506. Decl, matches InnerMatcher.
  3507. Given
  3508. namespace N {
  3509. namespace M {
  3510. class D {};
  3511. }
  3512. }
  3513. cxxRcordDecl(hasDeclContext(namedDecl(hasName("M")))) matches the
  3514. declaration of class D.
  3515. </pre></td></tr>
  3516. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DoStmt.html">DoStmt</a>&gt;</td><td class="name" onclick="toggle('hasBody0')"><a name="hasBody0Anchor">hasBody</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  3517. <tr><td colspan="4" class="doc" id="hasBody0"><pre>Matches a 'for', 'while', 'do while' statement or a function
  3518. definition that has a given body.
  3519. Given
  3520. for (;;) {}
  3521. hasBody(compoundStmt())
  3522. matches 'for (;;) {}'
  3523. with compoundStmt()
  3524. matching '{}'
  3525. </pre></td></tr>
  3526. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DoStmt.html">DoStmt</a>&gt;</td><td class="name" onclick="toggle('hasCondition3')"><a name="hasCondition3Anchor">hasCondition</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3527. <tr><td colspan="4" class="doc" id="hasCondition3"><pre>Matches the condition expression of an if statement, for loop,
  3528. switch statement or conditional operator.
  3529. Example matches true (matcher = hasCondition(cxxBoolLiteral(equals(true))))
  3530. if (true) {}
  3531. </pre></td></tr>
  3532. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ElaboratedType.html">ElaboratedType</a>&gt;</td><td class="name" onclick="toggle('hasQualifier0')"><a name="hasQualifier0Anchor">hasQualifier</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt; InnerMatcher</td></tr>
  3533. <tr><td colspan="4" class="doc" id="hasQualifier0"><pre>Matches ElaboratedTypes whose qualifier, a NestedNameSpecifier,
  3534. matches InnerMatcher if the qualifier exists.
  3535. Given
  3536. namespace N {
  3537. namespace M {
  3538. class D {};
  3539. }
  3540. }
  3541. N::M::D d;
  3542. elaboratedType(hasQualifier(hasPrefix(specifiesNamespace(hasName("N"))))
  3543. matches the type of the variable declaration of d.
  3544. </pre></td></tr>
  3545. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ElaboratedType.html">ElaboratedType</a>&gt;</td><td class="name" onclick="toggle('namesType0')"><a name="namesType0Anchor">namesType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  3546. <tr><td colspan="4" class="doc" id="namesType0"><pre>Matches ElaboratedTypes whose named type matches InnerMatcher.
  3547. Given
  3548. namespace N {
  3549. namespace M {
  3550. class D {};
  3551. }
  3552. }
  3553. N::M::D d;
  3554. elaboratedType(namesType(recordType(
  3555. hasDeclaration(namedDecl(hasName("D")))))) matches the type of the variable
  3556. declaration of d.
  3557. </pre></td></tr>
  3558. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration10')"><a name="hasDeclaration10Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3559. <tr><td colspan="4" class="doc" id="hasDeclaration10"><pre>Matches a node if the declaration associated with that node
  3560. matches the given matcher.
  3561. The associated declaration is:
  3562. - for type nodes, the declaration of the underlying type
  3563. - for CallExpr, the declaration of the callee
  3564. - for MemberExpr, the declaration of the referenced member
  3565. - for CXXConstructExpr, the declaration of the constructor
  3566. - for CXXNewExpr, the declaration of the operator new
  3567. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  3568. function. e.g. various subtypes of clang::Type and various expressions.
  3569. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  3570. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  3571. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  3572. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  3573. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  3574. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  3575. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  3576. </pre></td></tr>
  3577. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>&gt;</td><td class="name" onclick="toggle('hasDestinationType0')"><a name="hasDestinationType0Anchor">hasDestinationType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  3578. <tr><td colspan="4" class="doc" id="hasDestinationType0"><pre>Matches casts whose destination type matches a given matcher.
  3579. (Note: Clang's AST refers to other conversions as "casts" too, and calls
  3580. actual casts "explicit" casts.)
  3581. </pre></td></tr>
  3582. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('hasType3')"><a name="hasType3Anchor">hasType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3583. <tr><td colspan="4" class="doc" id="hasType3"><pre>Overloaded to match the declaration of the expression's or value
  3584. declaration's type.
  3585. In case of a value declaration (for example a variable declaration),
  3586. this resolves one layer of indirection. For example, in the value
  3587. declaration "X x;", cxxRecordDecl(hasName("X")) matches the declaration of
  3588. X, while varDecl(hasType(cxxRecordDecl(hasName("X")))) matches the
  3589. declaration of x.
  3590. Example matches x (matcher = expr(hasType(cxxRecordDecl(hasName("X")))))
  3591. and z (matcher = varDecl(hasType(cxxRecordDecl(hasName("X")))))
  3592. class X {};
  3593. void y(X &amp;x) { x; X z; }
  3594. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt;
  3595. </pre></td></tr>
  3596. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('hasType0')"><a name="hasType0Anchor">hasType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  3597. <tr><td colspan="4" class="doc" id="hasType0"><pre>Matches if the expression's or declaration's type matches a type
  3598. matcher.
  3599. Example matches x (matcher = expr(hasType(cxxRecordDecl(hasName("X")))))
  3600. and z (matcher = varDecl(hasType(cxxRecordDecl(hasName("X")))))
  3601. and U (matcher = typedefDecl(hasType(asString("int")))
  3602. class X {};
  3603. void y(X &amp;x) { x; X z; }
  3604. typedef int U;
  3605. </pre></td></tr>
  3606. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('ignoringImpCasts0')"><a name="ignoringImpCasts0Anchor">ignoringImpCasts</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3607. <tr><td colspan="4" class="doc" id="ignoringImpCasts0"><pre>Matches expressions that match InnerMatcher after any implicit casts
  3608. are stripped off.
  3609. Parentheses and explicit casts are not discarded.
  3610. Given
  3611. int arr[5];
  3612. int a = 0;
  3613. char b = 0;
  3614. const int c = a;
  3615. int *d = arr;
  3616. long e = (long) 0l;
  3617. The matchers
  3618. varDecl(hasInitializer(ignoringImpCasts(integerLiteral())))
  3619. varDecl(hasInitializer(ignoringImpCasts(declRefExpr())))
  3620. would match the declarations for a, b, c, and d, but not e.
  3621. While
  3622. varDecl(hasInitializer(integerLiteral()))
  3623. varDecl(hasInitializer(declRefExpr()))
  3624. only match the declarations for b, c, and d.
  3625. </pre></td></tr>
  3626. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('ignoringImplicit0')"><a name="ignoringImplicit0Anchor">ignoringImplicit</a></td><td>ast_matchers::Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3627. <tr><td colspan="4" class="doc" id="ignoringImplicit0"><pre>Matches expressions that match InnerMatcher after any implicit AST
  3628. nodes are stripped off.
  3629. Parentheses and explicit casts are not discarded.
  3630. Given
  3631. class C {};
  3632. C a = C();
  3633. C b;
  3634. C c = b;
  3635. The matchers
  3636. varDecl(hasInitializer(ignoringImplicit(cxxConstructExpr())))
  3637. would match the declarations for a, b, and c.
  3638. While
  3639. varDecl(hasInitializer(cxxConstructExpr()))
  3640. only match the declarations for b and c.
  3641. </pre></td></tr>
  3642. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('ignoringParenCasts0')"><a name="ignoringParenCasts0Anchor">ignoringParenCasts</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3643. <tr><td colspan="4" class="doc" id="ignoringParenCasts0"><pre>Matches expressions that match InnerMatcher after parentheses and
  3644. casts are stripped off.
  3645. Implicit and non-C Style casts are also discarded.
  3646. Given
  3647. int a = 0;
  3648. char b = (0);
  3649. void* c = reinterpret_cast&lt;char*&gt;(0);
  3650. char d = char(0);
  3651. The matcher
  3652. varDecl(hasInitializer(ignoringParenCasts(integerLiteral())))
  3653. would match the declarations for a, b, c, and d.
  3654. while
  3655. varDecl(hasInitializer(integerLiteral()))
  3656. only match the declaration for a.
  3657. </pre></td></tr>
  3658. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('ignoringParenImpCasts0')"><a name="ignoringParenImpCasts0Anchor">ignoringParenImpCasts</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3659. <tr><td colspan="4" class="doc" id="ignoringParenImpCasts0"><pre>Matches expressions that match InnerMatcher after implicit casts and
  3660. parentheses are stripped off.
  3661. Explicit casts are not discarded.
  3662. Given
  3663. int arr[5];
  3664. int a = 0;
  3665. char b = (0);
  3666. const int c = a;
  3667. int *d = (arr);
  3668. long e = ((long) 0l);
  3669. The matchers
  3670. varDecl(hasInitializer(ignoringParenImpCasts(integerLiteral())))
  3671. varDecl(hasInitializer(ignoringParenImpCasts(declRefExpr())))
  3672. would match the declarations for a, b, c, and d, but not e.
  3673. while
  3674. varDecl(hasInitializer(integerLiteral()))
  3675. varDecl(hasInitializer(declRefExpr()))
  3676. would only match the declaration for a.
  3677. </pre></td></tr>
  3678. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FieldDecl.html">FieldDecl</a>&gt;</td><td class="name" onclick="toggle('hasInClassInitializer0')"><a name="hasInClassInitializer0Anchor">hasInClassInitializer</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3679. <tr><td colspan="4" class="doc" id="hasInClassInitializer0"><pre>Matches non-static data members that have an in-class initializer.
  3680. Given
  3681. class C {
  3682. int a = 2;
  3683. int b = 3;
  3684. int c;
  3685. };
  3686. fieldDecl(hasInClassInitializer(integerLiteral(equals(2))))
  3687. matches 'int a;' but not 'int b;'.
  3688. fieldDecl(hasInClassInitializer(anything()))
  3689. matches 'int a;' and 'int b;' but not 'int c;'.
  3690. </pre></td></tr>
  3691. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;</td><td class="name" onclick="toggle('hasBody1')"><a name="hasBody1Anchor">hasBody</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  3692. <tr><td colspan="4" class="doc" id="hasBody1"><pre>Matches a 'for', 'while', 'do while' statement or a function
  3693. definition that has a given body.
  3694. Given
  3695. for (;;) {}
  3696. hasBody(compoundStmt())
  3697. matches 'for (;;) {}'
  3698. with compoundStmt()
  3699. matching '{}'
  3700. </pre></td></tr>
  3701. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;</td><td class="name" onclick="toggle('hasCondition1')"><a name="hasCondition1Anchor">hasCondition</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3702. <tr><td colspan="4" class="doc" id="hasCondition1"><pre>Matches the condition expression of an if statement, for loop,
  3703. switch statement or conditional operator.
  3704. Example matches true (matcher = hasCondition(cxxBoolLiteral(equals(true))))
  3705. if (true) {}
  3706. </pre></td></tr>
  3707. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;</td><td class="name" onclick="toggle('hasIncrement0')"><a name="hasIncrement0Anchor">hasIncrement</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  3708. <tr><td colspan="4" class="doc" id="hasIncrement0"><pre>Matches the increment statement of a for loop.
  3709. Example:
  3710. forStmt(hasIncrement(unaryOperator(hasOperatorName("++"))))
  3711. matches '++x' in
  3712. for (x; x &lt; N; ++x) { }
  3713. </pre></td></tr>
  3714. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;</td><td class="name" onclick="toggle('hasLoopInit0')"><a name="hasLoopInit0Anchor">hasLoopInit</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  3715. <tr><td colspan="4" class="doc" id="hasLoopInit0"><pre>Matches the initialization statement of a for loop.
  3716. Example:
  3717. forStmt(hasLoopInit(declStmt()))
  3718. matches 'int x = 0' in
  3719. for (int x = 0; x &lt; N; ++x) { }
  3720. </pre></td></tr>
  3721. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('hasAnyParameter0')"><a name="hasAnyParameter0Anchor">hasAnyParameter</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html">ParmVarDecl</a>&gt; InnerMatcher</td></tr>
  3722. <tr><td colspan="4" class="doc" id="hasAnyParameter0"><pre>Matches any parameter of a function declaration.
  3723. Does not match the 'this' parameter of a method.
  3724. Given
  3725. class X { void f(int x, int y, int z) {} };
  3726. cxxMethodDecl(hasAnyParameter(hasName("y")))
  3727. matches f(int x, int y, int z) {}
  3728. with hasAnyParameter(...)
  3729. matching int y
  3730. </pre></td></tr>
  3731. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('hasAnyTemplateArgument2')"><a name="hasAnyTemplateArgument2Anchor">hasAnyTemplateArgument</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt; InnerMatcher</td></tr>
  3732. <tr><td colspan="4" class="doc" id="hasAnyTemplateArgument2"><pre>Matches classTemplateSpecializations, templateSpecializationType and
  3733. functionDecl that have at least one TemplateArgument matching the given
  3734. InnerMatcher.
  3735. Given
  3736. template&lt;typename T&gt; class A {};
  3737. template&lt;&gt; class A&lt;double&gt; {};
  3738. A&lt;int&gt; a;
  3739. template&lt;typename T&gt; f() {};
  3740. void func() { f&lt;int&gt;(); };
  3741. classTemplateSpecializationDecl(hasAnyTemplateArgument(
  3742. refersToType(asString("int"))))
  3743. matches the specialization A&lt;int&gt;
  3744. functionDecl(hasAnyTemplateArgument(refersToType(asString("int"))))
  3745. matches the specialization f&lt;int&gt;
  3746. </pre></td></tr>
  3747. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('hasBody4')"><a name="hasBody4Anchor">hasBody</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  3748. <tr><td colspan="4" class="doc" id="hasBody4"><pre>Matches a 'for', 'while', 'do while' statement or a function
  3749. definition that has a given body.
  3750. Given
  3751. for (;;) {}
  3752. hasBody(compoundStmt())
  3753. matches 'for (;;) {}'
  3754. with compoundStmt()
  3755. matching '{}'
  3756. </pre></td></tr>
  3757. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('hasParameter0')"><a name="hasParameter0Anchor">hasParameter</a></td><td>unsigned N, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html">ParmVarDecl</a>&gt; InnerMatcher</td></tr>
  3758. <tr><td colspan="4" class="doc" id="hasParameter0"><pre>Matches the n'th parameter of a function declaration.
  3759. Given
  3760. class X { void f(int x) {} };
  3761. cxxMethodDecl(hasParameter(0, hasType(varDecl())))
  3762. matches f(int x) {}
  3763. with hasParameter(...)
  3764. matching int x
  3765. </pre></td></tr>
  3766. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('hasTemplateArgument2')"><a name="hasTemplateArgument2Anchor">hasTemplateArgument</a></td><td>unsigned N, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt; InnerMatcher</td></tr>
  3767. <tr><td colspan="4" class="doc" id="hasTemplateArgument2"><pre>Matches classTemplateSpecializations, templateSpecializationType and
  3768. functionDecl where the n'th TemplateArgument matches the given InnerMatcher.
  3769. Given
  3770. template&lt;typename T, typename U&gt; class A {};
  3771. A&lt;bool, int&gt; b;
  3772. A&lt;int, bool&gt; c;
  3773. template&lt;typename T&gt; f() {};
  3774. void func() { f&lt;int&gt;(); };
  3775. classTemplateSpecializationDecl(hasTemplateArgument(
  3776. 1, refersToType(asString("int"))))
  3777. matches the specialization A&lt;bool, int&gt;
  3778. functionDecl(hasTemplateArgument(0, refersToType(asString("int"))))
  3779. matches the specialization f&lt;int&gt;
  3780. </pre></td></tr>
  3781. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('returns0')"><a name="returns0Anchor">returns</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  3782. <tr><td colspan="4" class="doc" id="returns0"><pre>Matches the return type of a function declaration.
  3783. Given:
  3784. class X { int f() { return 1; } };
  3785. cxxMethodDecl(returns(asString("int")))
  3786. matches int f() { return 1; }
  3787. </pre></td></tr>
  3788. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;</td><td class="name" onclick="toggle('hasCondition0')"><a name="hasCondition0Anchor">hasCondition</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3789. <tr><td colspan="4" class="doc" id="hasCondition0"><pre>Matches the condition expression of an if statement, for loop,
  3790. switch statement or conditional operator.
  3791. Example matches true (matcher = hasCondition(cxxBoolLiteral(equals(true))))
  3792. if (true) {}
  3793. </pre></td></tr>
  3794. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;</td><td class="name" onclick="toggle('hasConditionVariableStatement0')"><a name="hasConditionVariableStatement0Anchor">hasConditionVariableStatement</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt; InnerMatcher</td></tr>
  3795. <tr><td colspan="4" class="doc" id="hasConditionVariableStatement0"><pre>Matches the condition variable statement in an if statement.
  3796. Given
  3797. if (A* a = GetAPointer()) {}
  3798. hasConditionVariableStatement(...)
  3799. matches 'A* a = GetAPointer()'.
  3800. </pre></td></tr>
  3801. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;</td><td class="name" onclick="toggle('hasElse0')"><a name="hasElse0Anchor">hasElse</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  3802. <tr><td colspan="4" class="doc" id="hasElse0"><pre>Matches the else-statement of an if statement.
  3803. Examples matches the if statement
  3804. (matcher = ifStmt(hasElse(cxxBoolLiteral(equals(true)))))
  3805. if (false) false; else true;
  3806. </pre></td></tr>
  3807. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;</td><td class="name" onclick="toggle('hasThen0')"><a name="hasThen0Anchor">hasThen</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  3808. <tr><td colspan="4" class="doc" id="hasThen0"><pre>Matches the then-statement of an if statement.
  3809. Examples matches the if statement
  3810. (matcher = ifStmt(hasThen(cxxBoolLiteral(equals(true)))))
  3811. if (false) true; else false;
  3812. </pre></td></tr>
  3813. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ImplicitCastExpr.html">ImplicitCastExpr</a>&gt;</td><td class="name" onclick="toggle('hasImplicitDestinationType0')"><a name="hasImplicitDestinationType0Anchor">hasImplicitDestinationType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  3814. <tr><td colspan="4" class="doc" id="hasImplicitDestinationType0"><pre>Matches implicit casts whose destination type matches a given
  3815. matcher.
  3816. FIXME: Unit test this matcher
  3817. </pre></td></tr>
  3818. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InitListExpr.html">InitListExpr</a>&gt;</td><td class="name" onclick="toggle('hasSyntacticForm0')"><a name="hasSyntacticForm0Anchor">hasSyntacticForm</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3819. <tr><td colspan="4" class="doc" id="hasSyntacticForm0"><pre>Matches the syntactic form of init list expressions
  3820. (if expression have it).
  3821. </pre></td></tr>
  3822. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration9')"><a name="hasDeclaration9Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3823. <tr><td colspan="4" class="doc" id="hasDeclaration9"><pre>Matches a node if the declaration associated with that node
  3824. matches the given matcher.
  3825. The associated declaration is:
  3826. - for type nodes, the declaration of the underlying type
  3827. - for CallExpr, the declaration of the callee
  3828. - for MemberExpr, the declaration of the referenced member
  3829. - for CXXConstructExpr, the declaration of the constructor
  3830. - for CXXNewExpr, the declaration of the operator new
  3831. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  3832. function. e.g. various subtypes of clang::Type and various expressions.
  3833. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  3834. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  3835. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  3836. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  3837. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  3838. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  3839. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  3840. </pre></td></tr>
  3841. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration8')"><a name="hasDeclaration8Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3842. <tr><td colspan="4" class="doc" id="hasDeclaration8"><pre>Matches a node if the declaration associated with that node
  3843. matches the given matcher.
  3844. The associated declaration is:
  3845. - for type nodes, the declaration of the underlying type
  3846. - for CallExpr, the declaration of the callee
  3847. - for MemberExpr, the declaration of the referenced member
  3848. - for CXXConstructExpr, the declaration of the constructor
  3849. - for CXXNewExpr, the declaration of the operator new
  3850. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  3851. function. e.g. various subtypes of clang::Type and various expressions.
  3852. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  3853. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  3854. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  3855. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  3856. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  3857. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  3858. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  3859. </pre></td></tr>
  3860. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration7')"><a name="hasDeclaration7Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  3861. <tr><td colspan="4" class="doc" id="hasDeclaration7"><pre>Matches a node if the declaration associated with that node
  3862. matches the given matcher.
  3863. The associated declaration is:
  3864. - for type nodes, the declaration of the underlying type
  3865. - for CallExpr, the declaration of the callee
  3866. - for MemberExpr, the declaration of the referenced member
  3867. - for CXXConstructExpr, the declaration of the constructor
  3868. - for CXXNewExpr, the declaration of the operator new
  3869. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  3870. function. e.g. various subtypes of clang::Type and various expressions.
  3871. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  3872. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  3873. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  3874. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  3875. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  3876. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  3877. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  3878. </pre></td></tr>
  3879. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;</td><td class="name" onclick="toggle('hasObjectExpression0')"><a name="hasObjectExpression0Anchor">hasObjectExpression</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3880. <tr><td colspan="4" class="doc" id="hasObjectExpression0"><pre>Matches a member expression where the object expression is
  3881. matched by a given matcher.
  3882. Given
  3883. struct X { int m; };
  3884. void f(X x) { x.m; m; }
  3885. memberExpr(hasObjectExpression(hasType(cxxRecordDecl(hasName("X")))))))
  3886. matches "x.m" and "m"
  3887. with hasObjectExpression(...)
  3888. matching "x" and the implicit object expression of "m" which has type X*.
  3889. </pre></td></tr>
  3890. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;</td><td class="name" onclick="toggle('member0')"><a name="member0Anchor">member</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt; InnerMatcher</td></tr>
  3891. <tr><td colspan="4" class="doc" id="member0"><pre>Matches a member expression where the member is matched by a
  3892. given matcher.
  3893. Given
  3894. struct { int first, second; } first, second;
  3895. int i(second.first);
  3896. int j(first.second);
  3897. memberExpr(member(hasName("first")))
  3898. matches second.first
  3899. but not first.second (because the member name there is "second").
  3900. </pre></td></tr>
  3901. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerTypeLoc.html">MemberPointerTypeLoc</a>&gt;</td><td class="name" onclick="toggle('pointeeLoc1')"><a name="pointeeLoc1Anchor">pointeeLoc</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
  3902. <tr><td colspan="4" class="doc" id="pointeeLoc1"><pre>Narrows PointerType (and similar) matchers to those where the
  3903. pointee matches a given matcher.
  3904. Given
  3905. int *a;
  3906. int const *b;
  3907. float const *f;
  3908. pointerType(pointee(isConstQualified(), isInteger()))
  3909. matches "int const *b"
  3910. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  3911. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  3912. </pre></td></tr>
  3913. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;</td><td class="name" onclick="toggle('pointee1')"><a name="pointee1Anchor">pointee</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  3914. <tr><td colspan="4" class="doc" id="pointee1"><pre>Narrows PointerType (and similar) matchers to those where the
  3915. pointee matches a given matcher.
  3916. Given
  3917. int *a;
  3918. int const *b;
  3919. float const *f;
  3920. pointerType(pointee(isConstQualified(), isInteger()))
  3921. matches "int const *b"
  3922. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  3923. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  3924. </pre></td></tr>
  3925. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;</td><td class="name" onclick="toggle('hasUnderlyingDecl0')"><a name="hasUnderlyingDecl0Anchor">hasUnderlyingDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt; InnerMatcher</td></tr>
  3926. <tr><td colspan="4" class="doc" id="hasUnderlyingDecl0"><pre>Matches a NamedDecl whose underlying declaration matches the given
  3927. matcher.
  3928. Given
  3929. namespace N { template&lt;class T&gt; void f(T t); }
  3930. template &lt;class T&gt; void g() { using N::f; f(T()); }
  3931. unresolvedLookupExpr(hasAnyDeclaration(
  3932. namedDecl(hasUnderlyingDecl(hasName("::N::f")))))
  3933. matches the use of f in g() .
  3934. </pre></td></tr>
  3935. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;</td><td class="name" onclick="toggle('hasPrefix1')"><a name="hasPrefix1Anchor">hasPrefix</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt; InnerMatcher</td></tr>
  3936. <tr><td colspan="4" class="doc" id="hasPrefix1"><pre>Matches on the prefix of a NestedNameSpecifierLoc.
  3937. Given
  3938. struct A { struct B { struct C {}; }; };
  3939. A::B::C c;
  3940. nestedNameSpecifierLoc(hasPrefix(loc(specifiesType(asString("struct A")))))
  3941. matches "A::"
  3942. </pre></td></tr>
  3943. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;</td><td class="name" onclick="toggle('specifiesTypeLoc0')"><a name="specifiesTypeLoc0Anchor">specifiesTypeLoc</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt; InnerMatcher</td></tr>
  3944. <tr><td colspan="4" class="doc" id="specifiesTypeLoc0"><pre>Matches nested name specifier locs that specify a type matching the
  3945. given TypeLoc.
  3946. Given
  3947. struct A { struct B { struct C {}; }; };
  3948. A::B::C c;
  3949. nestedNameSpecifierLoc(specifiesTypeLoc(loc(type(
  3950. hasDeclaration(cxxRecordDecl(hasName("A")))))))
  3951. matches "A::"
  3952. </pre></td></tr>
  3953. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;</td><td class="name" onclick="toggle('hasPrefix0')"><a name="hasPrefix0Anchor">hasPrefix</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt; InnerMatcher</td></tr>
  3954. <tr><td colspan="4" class="doc" id="hasPrefix0"><pre>Matches on the prefix of a NestedNameSpecifier.
  3955. Given
  3956. struct A { struct B { struct C {}; }; };
  3957. A::B::C c;
  3958. nestedNameSpecifier(hasPrefix(specifiesType(asString("struct A")))) and
  3959. matches "A::"
  3960. </pre></td></tr>
  3961. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;</td><td class="name" onclick="toggle('specifiesNamespace0')"><a name="specifiesNamespace0Anchor">specifiesNamespace</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamespaceDecl.html">NamespaceDecl</a>&gt; InnerMatcher</td></tr>
  3962. <tr><td colspan="4" class="doc" id="specifiesNamespace0"><pre>Matches nested name specifiers that specify a namespace matching the
  3963. given namespace matcher.
  3964. Given
  3965. namespace ns { struct A {}; }
  3966. ns::A a;
  3967. nestedNameSpecifier(specifiesNamespace(hasName("ns")))
  3968. matches "ns::"
  3969. </pre></td></tr>
  3970. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;</td><td class="name" onclick="toggle('specifiesType0')"><a name="specifiesType0Anchor">specifiesType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  3971. <tr><td colspan="4" class="doc" id="specifiesType0"><pre>Matches nested name specifiers that specify a type matching the
  3972. given QualType matcher without qualifiers.
  3973. Given
  3974. struct A { struct B { struct C {}; }; };
  3975. A::B::C c;
  3976. nestedNameSpecifier(specifiesType(
  3977. hasDeclaration(cxxRecordDecl(hasName("A")))
  3978. ))
  3979. matches "A::"
  3980. </pre></td></tr>
  3981. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>&gt;</td><td class="name" onclick="toggle('hasArgument2')"><a name="hasArgument2Anchor">hasArgument</a></td><td>unsigned N, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3982. <tr><td colspan="4" class="doc" id="hasArgument2"><pre>Matches the n'th argument of a call expression or a constructor
  3983. call expression.
  3984. Example matches y in x(y)
  3985. (matcher = callExpr(hasArgument(0, declRefExpr())))
  3986. void x(int) { int y; x(y); }
  3987. </pre></td></tr>
  3988. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCMessageExpr.html">ObjCMessageExpr</a>&gt;</td><td class="name" onclick="toggle('hasReceiverType0')"><a name="hasReceiverType0Anchor">hasReceiverType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  3989. <tr><td colspan="4" class="doc" id="hasReceiverType0"><pre>Matches on the receiver of an ObjectiveC Message expression.
  3990. Example
  3991. matcher = objCMessageExpr(hasReceiverType(asString("UIWebView *")));
  3992. matches the [webView ...] message invocation.
  3993. NSString *webViewJavaScript = ...
  3994. UIWebView *webView = ...
  3995. [webView stringByEvaluatingJavaScriptFromString:webViewJavascript];
  3996. </pre></td></tr>
  3997. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1OpaqueValueExpr.html">OpaqueValueExpr</a>&gt;</td><td class="name" onclick="toggle('hasSourceExpression1')"><a name="hasSourceExpression1Anchor">hasSourceExpression</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  3998. <tr><td colspan="4" class="doc" id="hasSourceExpression1"><pre></pre></td></tr>
  3999. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1OverloadExpr.html">OverloadExpr</a>&gt;</td><td class="name" onclick="toggle('hasAnyDeclaration0')"><a name="hasAnyDeclaration0Anchor">hasAnyDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  4000. <tr><td colspan="4" class="doc" id="hasAnyDeclaration0"><pre>Matches an OverloadExpr if any of the declarations in the set of
  4001. overloads matches the given matcher.
  4002. Given
  4003. template &lt;typename T&gt; void foo(T);
  4004. template &lt;typename T&gt; void bar(T);
  4005. template &lt;typename T&gt; void baz(T t) {
  4006. foo(t);
  4007. bar(t);
  4008. }
  4009. unresolvedLookupExpr(hasAnyDeclaration(
  4010. functionTemplateDecl(hasName("foo"))))
  4011. matches foo in foo(t); but not bar in bar(t);
  4012. </pre></td></tr>
  4013. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ParenType.html">ParenType</a>&gt;</td><td class="name" onclick="toggle('innerType0')"><a name="innerType0Anchor">innerType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  4014. <tr><td colspan="4" class="doc" id="innerType0"><pre>Matches ParenType nodes where the inner type is a specific type.
  4015. Given
  4016. int (*ptr_to_array)[4];
  4017. int (*ptr_to_func)(int);
  4018. varDecl(hasType(pointsTo(parenType(innerType(functionType()))))) matches
  4019. ptr_to_func but not ptr_to_array.
  4020. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ParenType.html">ParenType</a>&gt;
  4021. </pre></td></tr>
  4022. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerTypeLoc.html">PointerTypeLoc</a>&gt;</td><td class="name" onclick="toggle('pointeeLoc2')"><a name="pointeeLoc2Anchor">pointeeLoc</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
  4023. <tr><td colspan="4" class="doc" id="pointeeLoc2"><pre>Narrows PointerType (and similar) matchers to those where the
  4024. pointee matches a given matcher.
  4025. Given
  4026. int *a;
  4027. int const *b;
  4028. float const *f;
  4029. pointerType(pointee(isConstQualified(), isInteger()))
  4030. matches "int const *b"
  4031. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  4032. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  4033. </pre></td></tr>
  4034. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;</td><td class="name" onclick="toggle('pointee2')"><a name="pointee2Anchor">pointee</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  4035. <tr><td colspan="4" class="doc" id="pointee2"><pre>Narrows PointerType (and similar) matchers to those where the
  4036. pointee matches a given matcher.
  4037. Given
  4038. int *a;
  4039. int const *b;
  4040. float const *f;
  4041. pointerType(pointee(isConstQualified(), isInteger()))
  4042. matches "int const *b"
  4043. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  4044. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  4045. </pre></td></tr>
  4046. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('hasCanonicalType0')"><a name="hasCanonicalType0Anchor">hasCanonicalType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  4047. <tr><td colspan="4" class="doc" id="hasCanonicalType0"><pre>Matches QualTypes whose canonical type matches InnerMatcher.
  4048. Given:
  4049. typedef int &amp;int_ref;
  4050. int a;
  4051. int_ref b = a;
  4052. varDecl(hasType(qualType(referenceType()))))) will not match the
  4053. declaration of b but varDecl(hasType(qualType(hasCanonicalType(referenceType())))))) does.
  4054. </pre></td></tr>
  4055. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration6')"><a name="hasDeclaration6Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  4056. <tr><td colspan="4" class="doc" id="hasDeclaration6"><pre>Matches a node if the declaration associated with that node
  4057. matches the given matcher.
  4058. The associated declaration is:
  4059. - for type nodes, the declaration of the underlying type
  4060. - for CallExpr, the declaration of the callee
  4061. - for MemberExpr, the declaration of the referenced member
  4062. - for CXXConstructExpr, the declaration of the constructor
  4063. - for CXXNewExpr, the declaration of the operator new
  4064. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  4065. function. e.g. various subtypes of clang::Type and various expressions.
  4066. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  4067. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  4068. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  4069. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  4070. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  4071. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  4072. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  4073. </pre></td></tr>
  4074. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('ignoringParens0')"><a name="ignoringParens0Anchor">ignoringParens</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  4075. <tr><td colspan="4" class="doc" id="ignoringParens0"><pre>Matches types that match InnerMatcher after any parens are stripped.
  4076. Given
  4077. void (*fp)(void);
  4078. The matcher
  4079. varDecl(hasType(pointerType(pointee(ignoringParens(functionType())))))
  4080. would match the declaration for fp.
  4081. </pre></td></tr>
  4082. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('pointsTo1')"><a name="pointsTo1Anchor">pointsTo</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  4083. <tr><td colspan="4" class="doc" id="pointsTo1"><pre>Overloaded to match the pointee type's declaration.
  4084. </pre></td></tr>
  4085. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('pointsTo0')"><a name="pointsTo0Anchor">pointsTo</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  4086. <tr><td colspan="4" class="doc" id="pointsTo0"><pre>Matches if the matched type is a pointer type and the pointee type
  4087. matches the specified matcher.
  4088. Example matches y-&gt;x()
  4089. (matcher = cxxMemberCallExpr(on(hasType(pointsTo
  4090. cxxRecordDecl(hasName("Y")))))))
  4091. class Y { public: void x(); };
  4092. void z() { Y *y; y-&gt;x(); }
  4093. </pre></td></tr>
  4094. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('references1')"><a name="references1Anchor">references</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  4095. <tr><td colspan="4" class="doc" id="references1"><pre>Overloaded to match the referenced type's declaration.
  4096. </pre></td></tr>
  4097. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('references0')"><a name="references0Anchor">references</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  4098. <tr><td colspan="4" class="doc" id="references0"><pre>Matches if the matched type is a reference type and the referenced
  4099. type matches the specified matcher.
  4100. Example matches X &amp;x and const X &amp;y
  4101. (matcher = varDecl(hasType(references(cxxRecordDecl(hasName("X"))))))
  4102. class X {
  4103. void a(X b) {
  4104. X &amp;x = b;
  4105. const X &amp;y = b;
  4106. }
  4107. };
  4108. </pre></td></tr>
  4109. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration5')"><a name="hasDeclaration5Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  4110. <tr><td colspan="4" class="doc" id="hasDeclaration5"><pre>Matches a node if the declaration associated with that node
  4111. matches the given matcher.
  4112. The associated declaration is:
  4113. - for type nodes, the declaration of the underlying type
  4114. - for CallExpr, the declaration of the callee
  4115. - for MemberExpr, the declaration of the referenced member
  4116. - for CXXConstructExpr, the declaration of the constructor
  4117. - for CXXNewExpr, the declaration of the operator new
  4118. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  4119. function. e.g. various subtypes of clang::Type and various expressions.
  4120. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  4121. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  4122. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  4123. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  4124. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  4125. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  4126. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  4127. </pre></td></tr>
  4128. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceTypeLoc.html">ReferenceTypeLoc</a>&gt;</td><td class="name" onclick="toggle('pointeeLoc3')"><a name="pointeeLoc3Anchor">pointeeLoc</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
  4129. <tr><td colspan="4" class="doc" id="pointeeLoc3"><pre>Narrows PointerType (and similar) matchers to those where the
  4130. pointee matches a given matcher.
  4131. Given
  4132. int *a;
  4133. int const *b;
  4134. float const *f;
  4135. pointerType(pointee(isConstQualified(), isInteger()))
  4136. matches "int const *b"
  4137. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  4138. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  4139. </pre></td></tr>
  4140. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;</td><td class="name" onclick="toggle('pointee3')"><a name="pointee3Anchor">pointee</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  4141. <tr><td colspan="4" class="doc" id="pointee3"><pre>Narrows PointerType (and similar) matchers to those where the
  4142. pointee matches a given matcher.
  4143. Given
  4144. int *a;
  4145. int const *b;
  4146. float const *f;
  4147. pointerType(pointee(isConstQualified(), isInteger()))
  4148. matches "int const *b"
  4149. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  4150. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  4151. </pre></td></tr>
  4152. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ReturnStmt.html">ReturnStmt</a>&gt;</td><td class="name" onclick="toggle('hasReturnValue0')"><a name="hasReturnValue0Anchor">hasReturnValue</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  4153. <tr><td colspan="4" class="doc" id="hasReturnValue0"><pre>Matches the return value expression of a return statement
  4154. Given
  4155. return a + b;
  4156. hasReturnValue(binaryOperator())
  4157. matches 'return a + b'
  4158. with binaryOperator()
  4159. matching 'a + b'
  4160. </pre></td></tr>
  4161. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1StmtExpr.html">StmtExpr</a>&gt;</td><td class="name" onclick="toggle('hasAnySubstatement1')"><a name="hasAnySubstatement1Anchor">hasAnySubstatement</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  4162. <tr><td colspan="4" class="doc" id="hasAnySubstatement1"><pre>Matches compound statements where at least one substatement matches
  4163. a given matcher. Also matches StmtExprs that have CompoundStmt as children.
  4164. Given
  4165. { {}; 1+2; }
  4166. hasAnySubstatement(compoundStmt())
  4167. matches '{ {}; 1+2; }'
  4168. with compoundStmt()
  4169. matching '{}'
  4170. </pre></td></tr>
  4171. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('alignOfExpr0')"><a name="alignOfExpr0Anchor">alignOfExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt; InnerMatcher</td></tr>
  4172. <tr><td colspan="4" class="doc" id="alignOfExpr0"><pre>Same as unaryExprOrTypeTraitExpr, but only matching
  4173. alignof.
  4174. </pre></td></tr>
  4175. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('forFunction0')"><a name="forFunction0Anchor">forFunction</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt; InnerMatcher</td></tr>
  4176. <tr><td colspan="4" class="doc" id="forFunction0"><pre>Matches declaration of the function the statement belongs to
  4177. Given:
  4178. F&amp; operator=(const F&amp; o) {
  4179. std::copy_if(o.begin(), o.end(), begin(), [](V v) { return v &gt; 0; });
  4180. return *this;
  4181. }
  4182. returnStmt(forFunction(hasName("operator=")))
  4183. matches 'return *this'
  4184. but does match 'return &gt; 0'
  4185. </pre></td></tr>
  4186. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('sizeOfExpr0')"><a name="sizeOfExpr0Anchor">sizeOfExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt; InnerMatcher</td></tr>
  4187. <tr><td colspan="4" class="doc" id="sizeOfExpr0"><pre>Same as unaryExprOrTypeTraitExpr, but only matching
  4188. sizeof.
  4189. </pre></td></tr>
  4190. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1SubstTemplateTypeParmType.html">SubstTemplateTypeParmType</a>&gt;</td><td class="name" onclick="toggle('hasReplacementType0')"><a name="hasReplacementType0Anchor">hasReplacementType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  4191. <tr><td colspan="4" class="doc" id="hasReplacementType0"><pre>Matches template type parameter substitutions that have a replacement
  4192. type that matches the provided matcher.
  4193. Given
  4194. template &lt;typename T&gt;
  4195. double F(T t);
  4196. int i;
  4197. double j = F(i);
  4198. substTemplateTypeParmType(hasReplacementType(type())) matches int
  4199. </pre></td></tr>
  4200. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1SwitchStmt.html">SwitchStmt</a>&gt;</td><td class="name" onclick="toggle('forEachSwitchCase0')"><a name="forEachSwitchCase0Anchor">forEachSwitchCase</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1SwitchCase.html">SwitchCase</a>&gt; InnerMatcher</td></tr>
  4201. <tr><td colspan="4" class="doc" id="forEachSwitchCase0"><pre>Matches each case or default statement belonging to the given switch
  4202. statement. This matcher may produce multiple matches.
  4203. Given
  4204. switch (1) { case 1: case 2: default: switch (2) { case 3: case 4: ; } }
  4205. switchStmt(forEachSwitchCase(caseStmt().bind("c"))).bind("s")
  4206. matches four times, with "c" binding each of "case 1:", "case 2:",
  4207. "case 3:" and "case 4:", and "s" respectively binding "switch (1)",
  4208. "switch (1)", "switch (2)" and "switch (2)".
  4209. </pre></td></tr>
  4210. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1SwitchStmt.html">SwitchStmt</a>&gt;</td><td class="name" onclick="toggle('hasCondition4')"><a name="hasCondition4Anchor">hasCondition</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  4211. <tr><td colspan="4" class="doc" id="hasCondition4"><pre>Matches the condition expression of an if statement, for loop,
  4212. switch statement or conditional operator.
  4213. Example matches true (matcher = hasCondition(cxxBoolLiteral(equals(true))))
  4214. if (true) {}
  4215. </pre></td></tr>
  4216. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration4')"><a name="hasDeclaration4Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  4217. <tr><td colspan="4" class="doc" id="hasDeclaration4"><pre>Matches a node if the declaration associated with that node
  4218. matches the given matcher.
  4219. The associated declaration is:
  4220. - for type nodes, the declaration of the underlying type
  4221. - for CallExpr, the declaration of the callee
  4222. - for MemberExpr, the declaration of the referenced member
  4223. - for CXXConstructExpr, the declaration of the constructor
  4224. - for CXXNewExpr, the declaration of the operator new
  4225. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  4226. function. e.g. various subtypes of clang::Type and various expressions.
  4227. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  4228. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  4229. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  4230. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  4231. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  4232. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  4233. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  4234. </pre></td></tr>
  4235. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('isExpr0')"><a name="isExpr0Anchor">isExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  4236. <tr><td colspan="4" class="doc" id="isExpr0"><pre>Matches a sugar TemplateArgument that refers to a certain expression.
  4237. Given
  4238. template&lt;typename T&gt; struct A {};
  4239. struct B { B* next; };
  4240. A&lt;&amp;B::next&gt; a;
  4241. templateSpecializationType(hasAnyTemplateArgument(
  4242. isExpr(hasDescendant(declRefExpr(to(fieldDecl(hasName("next"))))))))
  4243. matches the specialization A&lt;&amp;B::next&gt; with fieldDecl(...) matching
  4244. B::next
  4245. </pre></td></tr>
  4246. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('refersToDeclaration0')"><a name="refersToDeclaration0Anchor">refersToDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  4247. <tr><td colspan="4" class="doc" id="refersToDeclaration0"><pre>Matches a canonical TemplateArgument that refers to a certain
  4248. declaration.
  4249. Given
  4250. template&lt;typename T&gt; struct A {};
  4251. struct B { B* next; };
  4252. A&lt;&amp;B::next&gt; a;
  4253. classTemplateSpecializationDecl(hasAnyTemplateArgument(
  4254. refersToDeclaration(fieldDecl(hasName("next"))))
  4255. matches the specialization A&lt;&amp;B::next&gt; with fieldDecl(...) matching
  4256. B::next
  4257. </pre></td></tr>
  4258. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('refersToIntegralType0')"><a name="refersToIntegralType0Anchor">refersToIntegralType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  4259. <tr><td colspan="4" class="doc" id="refersToIntegralType0"><pre>Matches a TemplateArgument that referes to an integral type.
  4260. Given
  4261. template&lt;int T&gt; struct A {};
  4262. C&lt;42&gt; c;
  4263. classTemplateSpecializationDecl(
  4264. hasAnyTemplateArgument(refersToIntegralType(asString("int"))))
  4265. matches the implicit instantiation of C in C&lt;42&gt;.
  4266. </pre></td></tr>
  4267. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('refersToTemplate0')"><a name="refersToTemplate0Anchor">refersToTemplate</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateName.html">TemplateName</a>&gt; InnerMatcher</td></tr>
  4268. <tr><td colspan="4" class="doc" id="refersToTemplate0"><pre>Matches a TemplateArgument that refers to a certain template.
  4269. Given
  4270. template&lt;template &lt;typename&gt; class S&gt; class X {};
  4271. template&lt;typename T&gt; class Y {};"
  4272. X&lt;Y&gt; xi;
  4273. classTemplateSpecializationDecl(hasAnyTemplateArgument(
  4274. refersToTemplate(templateName())))
  4275. matches the specialization X&lt;Y&gt;
  4276. </pre></td></tr>
  4277. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('refersToType0')"><a name="refersToType0Anchor">refersToType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  4278. <tr><td colspan="4" class="doc" id="refersToType0"><pre>Matches a TemplateArgument that refers to a certain type.
  4279. Given
  4280. struct X {};
  4281. template&lt;typename T&gt; struct A {};
  4282. A&lt;X&gt; a;
  4283. classTemplateSpecializationDecl(hasAnyTemplateArgument(
  4284. refersToType(class(hasName("X")))))
  4285. matches the specialization A&lt;X&gt;
  4286. </pre></td></tr>
  4287. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;</td><td class="name" onclick="toggle('hasAnyTemplateArgument1')"><a name="hasAnyTemplateArgument1Anchor">hasAnyTemplateArgument</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt; InnerMatcher</td></tr>
  4288. <tr><td colspan="4" class="doc" id="hasAnyTemplateArgument1"><pre>Matches classTemplateSpecializations, templateSpecializationType and
  4289. functionDecl that have at least one TemplateArgument matching the given
  4290. InnerMatcher.
  4291. Given
  4292. template&lt;typename T&gt; class A {};
  4293. template&lt;&gt; class A&lt;double&gt; {};
  4294. A&lt;int&gt; a;
  4295. template&lt;typename T&gt; f() {};
  4296. void func() { f&lt;int&gt;(); };
  4297. classTemplateSpecializationDecl(hasAnyTemplateArgument(
  4298. refersToType(asString("int"))))
  4299. matches the specialization A&lt;int&gt;
  4300. functionDecl(hasAnyTemplateArgument(refersToType(asString("int"))))
  4301. matches the specialization f&lt;int&gt;
  4302. </pre></td></tr>
  4303. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration3')"><a name="hasDeclaration3Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  4304. <tr><td colspan="4" class="doc" id="hasDeclaration3"><pre>Matches a node if the declaration associated with that node
  4305. matches the given matcher.
  4306. The associated declaration is:
  4307. - for type nodes, the declaration of the underlying type
  4308. - for CallExpr, the declaration of the callee
  4309. - for MemberExpr, the declaration of the referenced member
  4310. - for CXXConstructExpr, the declaration of the constructor
  4311. - for CXXNewExpr, the declaration of the operator new
  4312. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  4313. function. e.g. various subtypes of clang::Type and various expressions.
  4314. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  4315. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  4316. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  4317. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  4318. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  4319. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  4320. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  4321. </pre></td></tr>
  4322. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;</td><td class="name" onclick="toggle('hasTemplateArgument1')"><a name="hasTemplateArgument1Anchor">hasTemplateArgument</a></td><td>unsigned N, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt; InnerMatcher</td></tr>
  4323. <tr><td colspan="4" class="doc" id="hasTemplateArgument1"><pre>Matches classTemplateSpecializations, templateSpecializationType and
  4324. functionDecl where the n'th TemplateArgument matches the given InnerMatcher.
  4325. Given
  4326. template&lt;typename T, typename U&gt; class A {};
  4327. A&lt;bool, int&gt; b;
  4328. A&lt;int, bool&gt; c;
  4329. template&lt;typename T&gt; f() {};
  4330. void func() { f&lt;int&gt;(); };
  4331. classTemplateSpecializationDecl(hasTemplateArgument(
  4332. 1, refersToType(asString("int"))))
  4333. matches the specialization A&lt;bool, int&gt;
  4334. functionDecl(hasTemplateArgument(0, refersToType(asString("int"))))
  4335. matches the specialization f&lt;int&gt;
  4336. </pre></td></tr>
  4337. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration2')"><a name="hasDeclaration2Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  4338. <tr><td colspan="4" class="doc" id="hasDeclaration2"><pre>Matches a node if the declaration associated with that node
  4339. matches the given matcher.
  4340. The associated declaration is:
  4341. - for type nodes, the declaration of the underlying type
  4342. - for CallExpr, the declaration of the callee
  4343. - for MemberExpr, the declaration of the referenced member
  4344. - for CXXConstructExpr, the declaration of the constructor
  4345. - for CXXNewExpr, the declaration of the operator new
  4346. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  4347. function. e.g. various subtypes of clang::Type and various expressions.
  4348. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  4349. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  4350. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  4351. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  4352. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  4353. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  4354. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  4355. </pre></td></tr>
  4356. <tr><td>Matcher&lt;T&gt;</td><td class="name" onclick="toggle('findAll0')"><a name="findAll0Anchor">findAll</a></td><td>Matcher&lt;T&gt; Matcher</td></tr>
  4357. <tr><td colspan="4" class="doc" id="findAll0"><pre>Matches if the node or any descendant matches.
  4358. Generates results for each match.
  4359. For example, in:
  4360. class A { class B {}; class C {}; };
  4361. The matcher:
  4362. cxxRecordDecl(hasName("::A"),
  4363. findAll(cxxRecordDecl(isDefinition()).bind("m")))
  4364. will generate results for A, B and C.
  4365. Usable as: Any Matcher
  4366. </pre></td></tr>
  4367. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefNameDecl.html">TypedefNameDecl</a>&gt;</td><td class="name" onclick="toggle('hasType1')"><a name="hasType1Anchor">hasType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  4368. <tr><td colspan="4" class="doc" id="hasType1"><pre>Matches if the expression's or declaration's type matches a type
  4369. matcher.
  4370. Example matches x (matcher = expr(hasType(cxxRecordDecl(hasName("X")))))
  4371. and z (matcher = varDecl(hasType(cxxRecordDecl(hasName("X")))))
  4372. and U (matcher = typedefDecl(hasType(asString("int")))
  4373. class X {};
  4374. void y(X &amp;x) { x; X z; }
  4375. typedef int U;
  4376. </pre></td></tr>
  4377. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration1')"><a name="hasDeclaration1Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  4378. <tr><td colspan="4" class="doc" id="hasDeclaration1"><pre>Matches a node if the declaration associated with that node
  4379. matches the given matcher.
  4380. The associated declaration is:
  4381. - for type nodes, the declaration of the underlying type
  4382. - for CallExpr, the declaration of the callee
  4383. - for MemberExpr, the declaration of the referenced member
  4384. - for CXXConstructExpr, the declaration of the constructor
  4385. - for CXXNewExpr, the declaration of the operator new
  4386. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  4387. function. e.g. various subtypes of clang::Type and various expressions.
  4388. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  4389. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  4390. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  4391. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  4392. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  4393. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  4394. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  4395. </pre></td></tr>
  4396. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('hasUnqualifiedDesugaredType0')"><a name="hasUnqualifiedDesugaredType0Anchor">hasUnqualifiedDesugaredType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt; InnerMatcher</td></tr>
  4397. <tr><td colspan="4" class="doc" id="hasUnqualifiedDesugaredType0"><pre>Matches if the matched type matches the unqualified desugared
  4398. type of the matched node.
  4399. For example, in:
  4400. class A {};
  4401. using B = A;
  4402. The matcher type(hasUniqualifeidDesugaredType(recordType())) matches
  4403. both B and A.
  4404. </pre></td></tr>
  4405. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt;</td><td class="name" onclick="toggle('hasArgumentOfType0')"><a name="hasArgumentOfType0Anchor">hasArgumentOfType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  4406. <tr><td colspan="4" class="doc" id="hasArgumentOfType0"><pre>Matches unary expressions that have a specific type of argument.
  4407. Given
  4408. int a, c; float b; int s = sizeof(a) + sizeof(b) + alignof(c);
  4409. unaryExprOrTypeTraitExpr(hasArgumentOfType(asString("int"))
  4410. matches sizeof(a) and alignof(c)
  4411. </pre></td></tr>
  4412. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryOperator.html">UnaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasUnaryOperand0')"><a name="hasUnaryOperand0Anchor">hasUnaryOperand</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  4413. <tr><td colspan="4" class="doc" id="hasUnaryOperand0"><pre>Matches if the operand of a unary operator matches.
  4414. Example matches true (matcher = hasUnaryOperand(
  4415. cxxBoolLiteral(equals(true))))
  4416. !true
  4417. </pre></td></tr>
  4418. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration0')"><a name="hasDeclaration0Anchor">hasDeclaration</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  4419. <tr><td colspan="4" class="doc" id="hasDeclaration0"><pre>Matches a node if the declaration associated with that node
  4420. matches the given matcher.
  4421. The associated declaration is:
  4422. - for type nodes, the declaration of the underlying type
  4423. - for CallExpr, the declaration of the callee
  4424. - for MemberExpr, the declaration of the referenced member
  4425. - for CXXConstructExpr, the declaration of the constructor
  4426. - for CXXNewExpr, the declaration of the operator new
  4427. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  4428. function. e.g. various subtypes of clang::Type and various expressions.
  4429. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1AddrLabelExpr.html">AddrLabelExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;,
  4430. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;,
  4431. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;,
  4432. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;,
  4433. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;,
  4434. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;,
  4435. Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  4436. </pre></td></tr>
  4437. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingDecl.html">UsingDecl</a>&gt;</td><td class="name" onclick="toggle('hasAnyUsingShadowDecl0')"><a name="hasAnyUsingShadowDecl0Anchor">hasAnyUsingShadowDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingShadowDecl.html">UsingShadowDecl</a>&gt; InnerMatcher</td></tr>
  4438. <tr><td colspan="4" class="doc" id="hasAnyUsingShadowDecl0"><pre>Matches any using shadow declaration.
  4439. Given
  4440. namespace X { void b(); }
  4441. using X::b;
  4442. usingDecl(hasAnyUsingShadowDecl(hasName("b"))))
  4443. matches using X::b </pre></td></tr>
  4444. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingShadowDecl.html">UsingShadowDecl</a>&gt;</td><td class="name" onclick="toggle('hasTargetDecl0')"><a name="hasTargetDecl0Anchor">hasTargetDecl</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt; InnerMatcher</td></tr>
  4445. <tr><td colspan="4" class="doc" id="hasTargetDecl0"><pre>Matches a using shadow declaration where the target declaration is
  4446. matched by the given matcher.
  4447. Given
  4448. namespace X { int a; void b(); }
  4449. using X::a;
  4450. using X::b;
  4451. usingDecl(hasAnyUsingShadowDecl(hasTargetDecl(functionDecl())))
  4452. matches using X::b but not using X::a </pre></td></tr>
  4453. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt;</td><td class="name" onclick="toggle('hasType4')"><a name="hasType4Anchor">hasType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  4454. <tr><td colspan="4" class="doc" id="hasType4"><pre>Overloaded to match the declaration of the expression's or value
  4455. declaration's type.
  4456. In case of a value declaration (for example a variable declaration),
  4457. this resolves one layer of indirection. For example, in the value
  4458. declaration "X x;", cxxRecordDecl(hasName("X")) matches the declaration of
  4459. X, while varDecl(hasType(cxxRecordDecl(hasName("X")))) matches the
  4460. declaration of x.
  4461. Example matches x (matcher = expr(hasType(cxxRecordDecl(hasName("X")))))
  4462. and z (matcher = varDecl(hasType(cxxRecordDecl(hasName("X")))))
  4463. class X {};
  4464. void y(X &amp;x) { x; X z; }
  4465. Usable as: Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;, Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt;
  4466. </pre></td></tr>
  4467. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt;</td><td class="name" onclick="toggle('hasType2')"><a name="hasType2Anchor">hasType</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  4468. <tr><td colspan="4" class="doc" id="hasType2"><pre>Matches if the expression's or declaration's type matches a type
  4469. matcher.
  4470. Example matches x (matcher = expr(hasType(cxxRecordDecl(hasName("X")))))
  4471. and z (matcher = varDecl(hasType(cxxRecordDecl(hasName("X")))))
  4472. and U (matcher = typedefDecl(hasType(asString("int")))
  4473. class X {};
  4474. void y(X &amp;x) { x; X z; }
  4475. typedef int U;
  4476. </pre></td></tr>
  4477. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('hasInitializer0')"><a name="hasInitializer0Anchor">hasInitializer</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  4478. <tr><td colspan="4" class="doc" id="hasInitializer0"><pre>Matches a variable declaration that has an initializer expression
  4479. that matches the given matcher.
  4480. Example matches x (matcher = varDecl(hasInitializer(callExpr())))
  4481. bool y() { return true; }
  4482. bool x = y();
  4483. </pre></td></tr>
  4484. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1VariableArrayType.html">VariableArrayType</a>&gt;</td><td class="name" onclick="toggle('hasSizeExpr0')"><a name="hasSizeExpr0Anchor">hasSizeExpr</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  4485. <tr><td colspan="4" class="doc" id="hasSizeExpr0"><pre>Matches VariableArrayType nodes that have a specific size
  4486. expression.
  4487. Given
  4488. void f(int b) {
  4489. int a[b];
  4490. }
  4491. variableArrayType(hasSizeExpr(ignoringImpCasts(declRefExpr(to(
  4492. varDecl(hasName("b")))))))
  4493. matches "int a[b]"
  4494. </pre></td></tr>
  4495. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1WhileStmt.html">WhileStmt</a>&gt;</td><td class="name" onclick="toggle('hasBody2')"><a name="hasBody2Anchor">hasBody</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  4496. <tr><td colspan="4" class="doc" id="hasBody2"><pre>Matches a 'for', 'while', 'do while' statement or a function
  4497. definition that has a given body.
  4498. Given
  4499. for (;;) {}
  4500. hasBody(compoundStmt())
  4501. matches 'for (;;) {}'
  4502. with compoundStmt()
  4503. matching '{}'
  4504. </pre></td></tr>
  4505. <tr><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1WhileStmt.html">WhileStmt</a>&gt;</td><td class="name" onclick="toggle('hasCondition2')"><a name="hasCondition2Anchor">hasCondition</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  4506. <tr><td colspan="4" class="doc" id="hasCondition2"><pre>Matches the condition expression of an if statement, for loop,
  4507. switch statement or conditional operator.
  4508. Example matches true (matcher = hasCondition(cxxBoolLiteral(equals(true))))
  4509. if (true) {}
  4510. </pre></td></tr>
  4511. <tr><td>Matcher&lt;internal::BindableMatcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;&gt;</td><td class="name" onclick="toggle('loc1')"><a name="loc1Anchor">loc</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt; InnerMatcher</td></tr>
  4512. <tr><td colspan="4" class="doc" id="loc1"><pre>Matches NestedNameSpecifierLocs for which the given inner
  4513. NestedNameSpecifier-matcher matches.
  4514. </pre></td></tr>
  4515. <tr><td>Matcher&lt;internal::BindableMatcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;&gt;</td><td class="name" onclick="toggle('loc0')"><a name="loc0Anchor">loc</a></td><td>Matcher&lt;<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  4516. <tr><td colspan="4" class="doc" id="loc0"><pre>Matches TypeLocs for which the given inner
  4517. QualType-matcher matches.
  4518. </pre></td></tr>
  4519. <!--END_TRAVERSAL_MATCHERS -->
  4520. </table>
  4521. </div>
  4522. </body>
  4523. </html>