12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491 |
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
- <title>Boost Macro Reference</title>
- <link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
- <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
- <link rel="home" href="../index.html" title="Boost.Config">
- <link rel="up" href="../index.html" title="Boost.Config">
- <link rel="prev" href="../index.html" title="Boost.Config">
- <link rel="next" href="build_config.html" title="Build Time Configuration">
- </head>
- <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
- <table cellpadding="2" width="100%"><tr>
- <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
- <td align="center"><a href="../../../../../index.html">Home</a></td>
- <td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
- <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
- <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
- <td align="center"><a href="../../../../../more/index.htm">More</a></td>
- </tr></table>
- <hr>
- <div class="spirit-nav">
- <a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="build_config.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h2 class="title" style="clear: both">
- <a name="boost_config.boost_macro_reference"></a><a class="link" href="boost_macro_reference.html" title="Boost Macro Reference">Boost Macro Reference</a>
- </h2></div></div></div>
- <div class="toc"><dl class="toc">
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__03_defects">Macros
- that describe C++03 defects</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_optional_features">Macros
- that describe optional features</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_possible_c___future_features">Macros
- that describe possible C++ future features</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__11_features_not_supported">Macros
- that describe C++11 features not supported</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__11_features_with_c__03_compilers">Macros
- that allow use of C++11 features with C++03 compilers</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__14_features_not_supported">Macros
- that describe C++14 features not supported</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__14_features_with_c__11_or_earlier_compilers">Macros
- that allow use of C++14 features with C++11 or earlier compilers</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__17_features_not_supported">Macros
- that describe C++17 features not supported</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__17_features_with_c__14_or_earlier_compilers">Macros
- that allow use of C++17 features with C++14 or earlier compilers</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_features_that_have_been_removed_from_the_standard_">Macros
- that describe features that have been removed from the standard.</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_helper_macros">Boost
- Helper Macros</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_informational_macros">Boost
- Informational Macros</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_deprecated_macros">Boost
- Deprecated Macros</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code">Macros
- for libraries with separate source code</a></span></dt>
- </dl></div>
- <div class="section">
- <div class="titlepage"><div><div><h3 class="title">
- <a name="boost_config.boost_macro_reference.macros_that_describe_c__03_defects"></a><a name="config_defects"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__03_defects" title="Macros that describe C++03 defects">Macros
- that describe C++03 defects</a>
- </h3></div></div></div>
- <p>
- The following macros all describe features that are required by the C++03
- standard, if one of the following macros is defined, then it represents a
- defect in the compiler's conformance with the 2003 standard.
- </p>
- <div class="informaltable"><table class="table">
- <colgroup>
- <col>
- <col>
- <col>
- </colgroup>
- <thead><tr>
- <th>
- <p>
- Macro
- </p>
- </th>
- <th>
- <p>
- Section
- </p>
- </th>
- <th>
- <p>
- Description
- </p>
- </th>
- </tr></thead>
- <tbody>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_BCB_PARTIAL_SPECIALIZATION_BUG</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler exhibits certain partial specialisation bug - probably
- Borland C++ Builder specific.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- Argument dependent lookup fails if there is a using declaration
- for the symbol being looked up in the current scope. For example,
- using <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">get_pointer</span></code>; prevents ADL from
- finding overloads of <code class="computeroutput"><span class="identifier">get_pointer</span></code>
- in namespaces nested inside boost (but not elsewhere). Probably
- Borland specific.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_ADL_BARRIER</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler locates and searches namespaces that it should <span class="emphasis"><em>*not*</em></span>
- in fact search when performing argument dependent lookup.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- Compiler does not implement argument-dependent lookup (also named
- Koenig lookup); see std::3.4.2 [basic.koenig.lookup]
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_PTR</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- If the compiler / library supplies non-standard or broken <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_COMPLETE_VALUE_INITIALIZATION</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- Compiler has not completely implemented value-initialization. See
- also <a href="../../../../utility/value_init.htm#compiler_issues" target="_top">The
- Utility/Value Init docs</a>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CTYPE_FUNCTIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The Platform does not provide functions for the character-classifying
- operations <code class="computeroutput"><span class="special"><</span><span class="identifier">ctype</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> and <code class="computeroutput"><span class="special"><</span><span class="identifier">cctype</span><span class="special">></span></code>,
- only macros.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CV_SPECIALIZATIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- If template specialisations for cv-qualified types conflict with
- a specialisation for a cv-unqualififed type.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CV_VOID_SPECIALIZATIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- If template specialisations for cv-void types conflict with a specialisation
- for void.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CWCHAR</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The Platform does not provide <code class="computeroutput"><span class="special"><</span><span class="identifier">wchar</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
- and <code class="computeroutput"><span class="special"><</span><span class="identifier">cwchar</span><span class="special">></span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CWCTYPE</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The Platform does not provide <code class="computeroutput"><span class="special"><</span><span class="identifier">wctype</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
- and <code class="computeroutput"><span class="special"><</span><span class="identifier">cwctype</span><span class="special">></span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_FENV_H</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform, Standard library
- </p>
- </td>
- <td>
- <p>
- The C standard library doesn't provide <code class="computeroutput"><span class="special"><</span><span class="identifier">fenv</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>.
- <a href="../../../../../boost/detail/fenv.hpp" target="_top"><code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">detail</span><span class="special">/</span><span class="identifier">fenv</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code></a>
- should be included instead of <code class="computeroutput"><span class="special"><</span><span class="identifier">fenv</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
- for maximum portability on platforms which do provide <code class="computeroutput"><span class="special"><</span><span class="identifier">fenv</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_DEPENDENT_NESTED_DERIVATIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler fails to compile a nested class that has a dependent
- base class:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
- <span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">:</span> <span class="special">{</span>
- <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">U</span><span class="special">></span>
- <span class="keyword">struct</span> <span class="identifier">bar</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">U</span> <span class="special">{};</span>
- </pre>
- <p>
- };
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- Template value parameters cannot have a dependent type, for example:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">type</span> <span class="identifier">value</span><span class="special">></span>
- <span class="keyword">class</span> <span class="identifier">X</span> <span class="special">{</span> <span class="special">...</span> <span class="special">};</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_EXCEPTION_STD_NAMESPACE</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard Library
- </p>
- </td>
- <td>
- <p>
- The standard library does not put some or all of the contents of
- <code class="computeroutput"><span class="special"><</span><span class="identifier">exception</span><span class="special">></span></code> in namespace std.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_EXCEPTIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler does not support exception handling (this setting
- is typically required by many C++ compilers for embedded platforms).
- Note that there is no requirement for boost libraries to honor
- this configuration setting - indeed doing so may be impossible
- in some cases. Those libraries that do honor this will typically
- abort if a critical error occurs - you have been warned!
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_FUNCTION_TEMPLATE_ORDERING</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler does not perform function template ordering or its
- function template ordering is incorrect.
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="comment">// #1</span>
- <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">);</span>
- <span class="comment">// #2</span>
- <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">(*)(</span><span class="identifier">U</span><span class="special">));</span>
- <span class="keyword">void</span> <span class="identifier">bar</span><span class="special">(</span><span class="keyword">int</span><span class="special">);</span>
- <span class="identifier">f</span><span class="special">(&</span><span class="identifier">bar</span><span class="special">);</span> <span class="comment">// should choose #2.</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_INCLASS_MEMBER_INITIALIZATION</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- Compiler violates std::9.4.2/4.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_INTRINSIC_WCHAR_T</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The C++ implementation does not provide <code class="computeroutput"><span class="keyword">wchar_t</span></code>,
- or it is really a synonym for another integral type. Use this symbol
- to decide whether it is appropriate to explicitly specialize a
- template on <code class="computeroutput"><span class="keyword">wchar_t</span></code>
- if there is already a specialization for other integer types.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_IOSFWD</span></code>
- </p>
- </td>
- <td>
- <p>
- std lib
- </p>
- </td>
- <td>
- <p>
- The standard library lacks <code class="computeroutput"><span class="special"><</span><span class="identifier">iosfwd</span><span class="special">></span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_IOSTREAM</span></code>
- </p>
- </td>
- <td>
- <p>
- std lib
- </p>
- </td>
- <td>
- <p>
- The standard library lacks <code class="computeroutput"><span class="special"><</span><span class="identifier">iostream</span><span class="special">></span></code>,
- <code class="computeroutput"><span class="special"><</span><span class="identifier">istream</span><span class="special">></span></code> or <code class="computeroutput"><span class="special"><</span><span class="identifier">ostream</span><span class="special">></span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_IS_ABSTRACT</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The C++ compiler does not support SFINAE with abstract types, this
- is covered by <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#337" target="_top">Core
- Language DR337</a>, but is not part of the current standard.
- Fortunately most compilers that support SFINAE also support this
- DR. See also BOOST_NO_SFINAE and BOOST_NO_SFINAE_EXPR
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_LIMITS</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The C++ implementation does not provide the <code class="computeroutput"><span class="special"><</span><span class="identifier">limits</span><span class="special">></span></code>
- header. Never check for this symbol in library code; always include
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">limits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>, which guarantees to provide
- <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NUMERIC_LIMITS</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- C++11 additions to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>
- are not available for use. <code class="computeroutput"><span class="keyword">static</span>
- <span class="identifier">function</span> <span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">lowest</span><span class="special">()</span></code> the lowest finite value representable
- by the numeric type. <code class="computeroutput"><span class="keyword">static</span>
- <span class="keyword">int</span> <span class="keyword">const</span>
- <span class="identifier">max_digits10</span></code> the number
- of decimal digits that are required to make sure that two distinct
- values of the type have distinct decimal representations. <code class="computeroutput"><span class="keyword">template</span><span class="special"><></span>
- <span class="keyword">class</span> <span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">char16_t</span><span class="special">>;</span></code>, see also <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR16_T</span></code>,
- <code class="computeroutput"><span class="keyword">template</span><span class="special"><></span>
- <span class="keyword">class</span> <span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">char32_t</span><span class="special">>;</span></code> see also <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR32_T</span></code>.
- Replaces BOOST_NO_NUMERIC_LIMITS_LOWEST.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- Constants such as <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_signed</span></code>
- are not available for use at compile-time.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_LONG_LONG_NUMERIC_LIMITS</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- There is no specialization for <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">long</span>
- <span class="keyword">long</span><span class="special">></span></code>
- and <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">unsigned</span>
- <span class="keyword">long</span> <span class="keyword">long</span><span class="special">></span></code>. <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">limits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- will then add these specializations as a standard library "fix"
- only if the compiler supports the <code class="computeroutput"><span class="keyword">long</span>
- <span class="keyword">long</span></code> datatype.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler does not support the specialization of individual
- member functions of template classes.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATE_KEYWORD</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- If the compiler supports member templates, but not the template
- keyword when accessing member template classes.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATE_FRIENDS</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- Member template friend syntax (<code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span>
- <span class="identifier">P</span><span class="special">></span>
- <span class="keyword">friend</span> <span class="keyword">class</span>
- <span class="identifier">frd</span><span class="special">;</span></code>)
- described in the C++ Standard, 14.5.3, not supported.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATES</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- Member template functions not fully supported.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_MS_INT64_NUMERIC_LIMITS</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- There is no specialization for <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">__int64</span><span class="special">></span></code> and <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">unsigned</span>
- <span class="identifier">__int64</span><span class="special">></span></code>.
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">limits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> will then add these specializations
- as a standard library "fix", only if the compiler supports
- the <code class="computeroutput"><span class="identifier">__int64</span></code> datatype.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_NESTED_FRIENDSHIP</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- Compiler doesn't allow a nested class to access private members
- of its containing class. Probably Borland/CodeGear specific.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_OPERATORS_IN_NAMESPACE</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- Compiler requires inherited operator friend functions to be defined
- at namespace scope, then using'ed to boost. Probably GCC specific.
- See <a href="../../../../../boost/operators.hpp" target="_top"><code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code></a> for example.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler does not correctly handle partial specializations
- which depend upon default arguments in the primary template.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_POINTER_TO_MEMBER_CONST</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler does not correctly handle pointers to const member
- functions, preventing use of these in overloaded function templates.
- See <a href="../../../../../boost/functional.hpp" target="_top"><code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">functional</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code></a> for example.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- Pointers to members don't work when used as template parameters.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_PRIVATE_IN_AGGREGATE</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler misreads 8.5.1, treating classes as non-aggregate
- if they contain private or protected member functions.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_RESTRICT_REFERENCES</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- Compiler-specific <code class="computeroutput"><span class="identifier">restrict</span></code>
- keyword can not be applied to references.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_RTTI</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler may (or may not) have the typeid operator, but RTTI
- on the dynamic type of an object is not supported.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_SFINAE</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler does not support the "Substitution Failure Is
- Not An Error" meta-programming idiom. This is the lightweight
- pre-C++11 version of SFINAE.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_SFINAE_EXPR</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler does not support usage of SFINAE with arbitrary expressions.
- This is the post-C++11 SFINAE, but excludes a few specific corner
- cases, see also BOOST_NO_CXX11_SFINAE_EXPR.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STD_ALLOCATOR</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The C++ standard library does not provide a standards conforming
- <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STD_DISTANCE</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The platform does not have a conforming version of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">distance</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STD_ITERATOR</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The C++ implementation fails to provide the <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator</span></code>
- class. Note that post C++17, this macro is re-purposed to indicate
- that std::iterator has been removed or deprecated.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STD_ITERATOR_TRAITS</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The compiler does not provide a standard compliant implementation
- of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span></code>. Note that the
- compiler may still have a non-standard implementation.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STD_LOCALE</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The standard library lacks <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STD_MESSAGES</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The standard library lacks a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">messages</span></code>
- facet.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STD_MIN_MAX</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The C++ standard library does not provide the <code class="computeroutput"><span class="identifier">min</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">max</span><span class="special">()</span></code> template functions that should
- be in <code class="computeroutput"><span class="special"><</span><span class="identifier">algorithm</span><span class="special">></span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- Defined if the standard library's output iterators are not assignable.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STD_TYPEINFO</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The <typeinfo> header declares <code class="computeroutput"><span class="identifier">type_info</span></code>
- in the global namespace instead of namespace std.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STD_USE_FACET</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The standard library lacks a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STD_WSTREAMBUF</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The standard library's implementation of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_streambuf</span><span class="special"><</span><span class="keyword">wchar_t</span><span class="special">></span></code> is either missing, incomplete,
- or buggy.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STD_WSTRING</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The standard library lacks <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">wstring</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STDC_NAMESPACE</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler, Platform
- </p>
- </td>
- <td>
- <p>
- The contents of C++ standard headers for C library functions (the
- <code class="computeroutput"><span class="special"><</span><span class="identifier">c</span><span class="special">...></span></code> headers) have not been placed
- in namespace std. This test is difficult - some libraries "fake"
- the std C functions by adding using declarations to import them
- into namespace std, unfortunately they don't necessarily catch
- all of them...
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STRINGSTREAM</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The C++ implementation does not provide the <code class="computeroutput"><span class="special"><</span><span class="identifier">sstream</span><span class="special">></span></code>
- header.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_SWPRINTF</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform does not have a conforming version of <code class="computeroutput"><span class="identifier">swprintf</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- Class template partial specialization (14.5.4 [temp.class.spec])
- not supported.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATED_IOSTREAMS</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide templated iostream classes.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide templated iterator constructors
- for its containers.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATE_TEMPLATES</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler does not support template template parameters.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_TYPEID</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler does not support the typeid operator at all.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_TYPENAME_WITH_CTOR</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The typename keyword cannot be used when creating a temporary of
- a Dependent type.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_UNREACHABLE_RETURN_DETECTION</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- If a return is unreachable, then no return statement should be
- required, however some compilers insist on it, while other issue
- a bunch of warnings if it is in fact present.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler will not accept a using declaration that brings a
- function from a typename used as a base class into a derived class
- if functions of the same name are present in the derived class.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_USING_TEMPLATE</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler will not accept a using declaration that imports a
- template class or function from another namespace. Originally a
- Borland specific problem with imports to/from the global namespace,
- extended to MSVC6 which has a specific issue with importing template
- classes (but not functions).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_VOID_RETURNS</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler does not allow a void function to return the result
- of calling another void function.
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span> <span class="special">{}</span>
- <span class="keyword">void</span> <span class="identifier">g</span><span class="special">()</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">f</span><span class="special">();</span> <span class="special">}</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- </tbody>
- </table></div>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h3 class="title">
- <a name="boost_config.boost_macro_reference.macros_that_describe_optional_features"></a><a name="config_features"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_optional_features" title="Macros that describe optional features">Macros
- that describe optional features</a>
- </h3></div></div></div>
- <p>
- The following macros describe features that are not required by the C++ standard.
- The macro is only defined if the feature is present.
- </p>
- <div class="informaltable"><table class="table">
- <colgroup>
- <col>
- <col>
- <col>
- </colgroup>
- <thead><tr>
- <th>
- <p>
- Macro
- </p>
- </th>
- <th>
- <p>
- Section
- </p>
- </th>
- <th>
- <p>
- Description
- </p>
- </th>
- </tr></thead>
- <tbody>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_BETHREADS</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform supports BeOS style threads.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_CLOCK_GETTIME</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform has the POSIX API <code class="computeroutput"><span class="identifier">clock_gettime</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_DIRENT_H</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform has the POSIX header <code class="computeroutput"><span class="special"><</span><span class="identifier">dirent</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_EXPM1</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform has the functions <code class="computeroutput"><span class="identifier">expm1</span></code>,
- <code class="computeroutput"><span class="identifier">expm1f</span></code> and <code class="computeroutput"><span class="identifier">expm1l</span></code> in <code class="computeroutput"><span class="special"><</span><span class="identifier">math</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_FLOAT128</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler has <code class="computeroutput"><span class="identifier">__float128</span></code>
- as a native type which is distinct from all the regular C++ floating
- point types.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_FTIME</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform has the Win32 API type FTIME.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_GETSYSTEMTIMEASFILETIME</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform has the Win32 API GetSystemTimeAsFileTime.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_GETTIMEOFDAY</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform has the POSIX API <code class="computeroutput"><span class="identifier">gettimeofday</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_HASH</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The C++ implementation provides the (SGI) hash_set and hash_map
- classes. When defined, <code class="computeroutput"><span class="identifier">BOOST_HASH_SET_HEADER</span></code>
- and <code class="computeroutput"><span class="identifier">BOOST_HASH_LIST_HEADER</span></code>
- will contain the names of the header needed to access hash_set
- and hash_map; <code class="computeroutput"><span class="identifier">BOOST_STD_EXTENSION_NAMESPACE</span></code>
- will provide the namespace in which the two class templates reside.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_INT128</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler has <code class="computeroutput"><span class="identifier">__int128</span></code>
- and <code class="computeroutput"><span class="keyword">unsigned</span> <span class="identifier">__int128</span></code>
- as native types which are distinct from all the regular C++ integer
- types.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_LOG1P</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform has the functions <code class="computeroutput"><span class="identifier">log1p</span></code>,
- <code class="computeroutput"><span class="identifier">log1pf</span></code> and <code class="computeroutput"><span class="identifier">log1pl</span></code> in <code class="computeroutput"><span class="special"><</span><span class="identifier">math</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_MACRO_USE_FACET</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The standard library lacks a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code>,
- but has a macro <code class="computeroutput"><span class="identifier">_USE</span><span class="special">(</span><span class="identifier">loc</span><span class="special">,</span> <span class="identifier">Type</span><span class="special">)</span></code> that does the job. This is primarily
- for the Dinkumware std lib.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_MS_INT64</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler supports the <code class="computeroutput"><span class="identifier">__int64</span></code>
- data type.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_NANOSLEEP</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform has the POSIX API nanosleep.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_NL_TYPES_H</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform has an <code class="computeroutput"><span class="special"><</span><span class="identifier">nl_types</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_NRVO</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- Indicated that the compiler supports the named return value optimization
- (NRVO). Used to select the most efficient implementation for some
- function. See <a href="../../../../../boost/operators.hpp" target="_top"><code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code></a> for example.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_PARTIAL_STD_ALLOCATOR</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard Library
- </p>
- </td>
- <td>
- <p>
- The standard library has a partially conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code>
- class, but without any of the member templates.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_PRAGMA_ONCE</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler recognizes the <code class="computeroutput"><span class="preprocessor">#pragma</span>
- <span class="identifier">once</span></code> directive which
- tells that the containing header should be included only once while
- preprocessing the current translation unit. The pragma may improve
- compile times of large projects with some compilers.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_PRAGMA_DETECT_MISMATCH</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- The compiler recognizes the <code class="computeroutput"><span class="preprocessor">#pragma</span>
- <span class="identifier">detect_mismatch</span><span class="special">(</span><span class="string">"name"</span><span class="special">,</span>
- <span class="string">"value"</span><span class="special">)</span></code>
- directive which tells that the link stage should be terminated
- with error if values for provided <code class="computeroutput"><span class="string">"name"</span></code>
- missmatch. This pragma may be a help in preventing ODR violations
- and ensuring that different modules are compiled with same flags.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_PTHREAD_DELAY_NP</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform has the POSIX API <code class="computeroutput"><span class="identifier">pthread_delay_np</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform has the POSIX API <code class="computeroutput"><span class="identifier">pthread_mutexattr_settype</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_PTHREAD_YIELD</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform has the POSIX API <code class="computeroutput"><span class="identifier">pthread_yield</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_PTHREADS</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform support POSIX style threads.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_SCHED_YIELD</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform has the POSIX API <code class="computeroutput"><span class="identifier">sched_yield</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_SGI_TYPE_TRAITS</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler, Standard library
- </p>
- </td>
- <td>
- <p>
- The compiler has native support for SGI style type traits.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_STDINT_H</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform has a <code class="computeroutput"><span class="special"><</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_SLIST</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The C++ implementation provides the (SGI) slist class. When defined,
- <code class="computeroutput"><span class="identifier">BOOST_SLIST_HEADER</span></code>
- will contain the name of the header needed to access <code class="computeroutput"><span class="identifier">slist</span></code> and <code class="computeroutput"><span class="identifier">BOOST_STD_EXTENSION_NAMESPACE</span></code>
- will provide the namespace in which <code class="computeroutput"><span class="identifier">slist</span></code>
- resides.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_STLP_USE_FACET</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The standard library lacks a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code>,
- but has a workaround class-version that does the job. This is primarily
- for the STLport std lib.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_ARRAY</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">array</span><span class="special">></span></code>.
- This macro is only guaranteed to be defined after including one
- of the headers from Boost.TR1. Further this macro is now deprecated
- in favour of BOOST_NO_CXX11_HDR_ARRAY.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_COMPLEX_OVERLOADS</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a version of <code class="computeroutput"><span class="special"><</span><span class="identifier">complex</span><span class="special">></span></code>
- that supports passing scalars to the complex number algorithms.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a version of <code class="computeroutput"><span class="special"><</span><span class="identifier">complex</span><span class="special">></span></code>
- that includes the new inverse trig functions from TR1.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_REFERENCE_WRAPPER</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has TR1 conforming reference wrappers in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed
- to be defined after including one of the headers from Boost.TR1.
- Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_RESULT_OF</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a TR1 conforming result_of template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed
- to be defined after including one of the headers from Boost.TR1.
- Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_MEM_FN</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a TR1 conforming mem_fn function template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed
- to be defined after including one of the headers from Boost.TR1.
- Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_BIND</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a TR1 conforming bind function template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed
- to be defined after including one of the headers from Boost.TR1.
- Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_FUNCTION</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a TR1 conforming function class template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed
- to be defined after including one of the headers from Boost.TR1.
- Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_HASH</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a TR1 conforming hash function template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed
- to be defined after including one of the headers from Boost.TR1.
- Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_SHARED_PTR</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a TR1 conforming <code class="computeroutput"><span class="identifier">shared_ptr</span></code>
- class template in <code class="computeroutput"><span class="special"><</span><span class="identifier">memory</span><span class="special">></span></code>.
- This macro is only guaranteed to be defined after including one
- of the headers from Boost.TR1. Further this macro is now deprecated
- in favour of BOOST_NO_CXX11_SMART_PTR.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_RANDOM</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">random</span><span class="special">></span></code>.
- This macro is only guaranteed to be defined after including one
- of the headers from Boost.TR1. Further this macro is now deprecated
- in favour of BOOST_NO_CXX11_HDR_RANDOM.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_REGEX</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">regex</span><span class="special">></span></code>.
- This macro is only guaranteed to be defined after including one
- of the headers from Boost.TR1. Further this macro is now deprecated
- in favour of BOOST_NO_CXX11_HDR_REGEX.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_TUPLE</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">tuple</span><span class="special">></span></code>.
- This macro is only guaranteed to be defined after including one
- of the headers from Boost.TR1. Further this macro is now deprecated
- in favour of BOOST_NO_CXX11_HDR_TUPLE.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_TYPE_TRAITS</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">type_traits</span><span class="special">></span></code>.
- This macro is only guaranteed to be defined after including one
- of the headers from Boost.TR1. Further this macro is now deprecated
- in favour of BOOST_NO_CXX11_HDR_TYPE_TRAITS.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_UTILITY</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has the TR1 additions to <code class="computeroutput"><span class="special"><</span><span class="identifier">utility</span><span class="special">></span></code>
- (tuple interface to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span></code>).
- This macro is only guaranteed to be defined after including one
- of the headers from Boost.TR1. Further this macro is now deprecated
- in favour of BOOST_NO_CXX11_HDR_TUPLE.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_UNORDERED_MAP</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">unordered_map</span><span class="special">></span></code>.
- This macro is only guaranteed to be defined after including one
- of the headers from Boost.TR1. Further this macro is now deprecated
- in favour of BOOST_NO_CXX11_HDR_UNORDERED_MAP.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_UNORDERED_SET</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">unordered_set</span><span class="special">></span></code>.
- This macro is only guaranteed to be defined after including one
- of the headers from Boost.TR1. Further this macro is now deprecated
- in favour of BOOST_NO_CXX11_HDR_UNORDERED_SET.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- Implies all the other <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_</span><span class="special">*</span></code> macros should be set.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_THREADS</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform, Compiler
- </p>
- </td>
- <td>
- <p>
- Defined if the compiler, in its current translation mode, supports
- multiple threads of execution.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_TWO_ARG_USE_FACET</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- The standard library lacks a conforming std::use_facet, but has
- a two argument version that does the job. This is primarily for
- the Rogue Wave std lib.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_UNISTD_H</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The Platform provides <code class="computeroutput"><span class="special"><</span><span class="identifier">unistd</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_WINTHREADS</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- The platform supports MS Windows style threads.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_MSVC_STD_ITERATOR</span></code>
- </p>
- </td>
- <td>
- <p>
- Standard library
- </p>
- </td>
- <td>
- <p>
- Microsoft's broken version of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator</span></code>
- is being used. This implies that <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator</span></code>
- takes no more than two template parameters.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_MSVC6_MEMBER_TEMPLATES</span></code>
- </p>
- </td>
- <td>
- <p>
- Compiler
- </p>
- </td>
- <td>
- <p>
- Microsoft Visual C++ 6.0 has enough member template idiosyncrasies
- (being polite) that <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATES</span></code>
- is defined for this compiler. <code class="computeroutput"><span class="identifier">BOOST_MSVC6_MEMBER_TEMPLATES</span></code>
- is defined to allow compiler specific workarounds. This macro gets
- defined automatically if <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATES</span></code>
- is not defined - in other words this is treated as a strict subset
- of the features required by the standard.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_STDINT_H</span></code>
- </p>
- </td>
- <td>
- <p>
- Platform
- </p>
- </td>
- <td>
- <p>
- There are no 1998 C++ Standard headers <code class="computeroutput"><span class="special"><</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
- or <code class="computeroutput"><span class="special"><</span><span class="identifier">cstdint</span><span class="special">></span></code>, although the 1999 C Standard
- does include <code class="computeroutput"><span class="special"><</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>.
- If <code class="computeroutput"><span class="special"><</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> is present, <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
- can make good use of it, so a flag is supplied (signalling presence;
- thus the default is not present, conforming to the current C++
- standard).
- </p>
- </td>
- </tr>
- </tbody>
- </table></div>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h3 class="title">
- <a name="boost_config.boost_macro_reference.macros_that_describe_possible_c___future_features"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_possible_c___future_features" title="Macros that describe possible C++ future features">Macros
- that describe possible C++ future features</a>
- </h3></div></div></div>
- <p>
- The following macros describe features that may be included in some future
- ISO C++ standard, but have not yet been approved for inclusion in the language.
- </p>
- <div class="informaltable"><table class="table">
- <colgroup>
- <col>
- <col>
- </colgroup>
- <thead><tr>
- <th>
- <p>
- Macro
- </p>
- </th>
- <th>
- <p>
- Description
- </p>
- </th>
- </tr></thead>
- <tbody><tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_CONCEPTS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler supports concepts.
- </p>
- </td>
- </tr></tbody>
- </table></div>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h3 class="title">
- <a name="boost_config.boost_macro_reference.macros_that_describe_c__11_features_not_supported"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__11_features_not_supported" title="Macros that describe C++11 features not supported">Macros
- that describe C++11 features not supported</a>
- </h3></div></div></div>
- <p>
- The following macros describe features in the 2011 ISO C++ standard, formerly
- known as C++0x, that are not yet supported by a particular compiler or library.
- </p>
- <div class="informaltable"><table class="table">
- <colgroup>
- <col>
- <col>
- </colgroup>
- <thead><tr>
- <th>
- <p>
- Macro
- </p>
- </th>
- <th>
- <p>
- Description
- </p>
- </th>
- </tr></thead>
- <tbody>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_ADDRESSOF</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library header <memory> has no working std::addressof.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_ALIGNAS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support the <code class="computeroutput"><span class="keyword">alignas</span></code>
- keyword.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_ALLOCATOR</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide a C++11 version of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code> in <memory>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_ATOMIC_SMART_PTR</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library <memory> does not support atomic smart
- pointer operations.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_AUTO_DECLARATIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support type deduction for variables declared
- with the <code class="computeroutput"><span class="keyword">auto</span></code> keyword
- (<code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">var</span>
- <span class="special">=</span> <span class="special">...;</span></code>).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support type deduction for multiple variables
- declared with the <code class="computeroutput"><span class="keyword">auto</span></code>
- keyword (<code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">var</span>
- <span class="special">=</span> <span class="special">...,</span>
- <span class="special">*</span><span class="identifier">ptr</span>
- <span class="special">=</span> <span class="special">...;</span></code>).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR16_T</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support type <code class="computeroutput"><span class="keyword">char16_t</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR32_T</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support type <code class="computeroutput"><span class="keyword">char32_t</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CONSTEXPR</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support <code class="computeroutput"><span class="keyword">constexpr</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DECLTYPE</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support <code class="computeroutput"><span class="keyword">decltype</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DECLTYPE_N3276</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support the extension to <code class="computeroutput"><span class="keyword">decltype</span></code>
- described in <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf" target="_top">N3276</a>,
- accepted in Madrid, March 2011.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DELETED_FUNCTIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support deleted (<code class="computeroutput"><span class="special">=</span>
- <span class="keyword">delete</span></code>) functions.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DEFAULTED_FUNCTIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support defaulted (<code class="computeroutput"><span class="special">=</span>
- <span class="keyword">default</span></code>) functions.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DEFAULTED_MOVES</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support defaulted move constructor or assignment.
- Other defaulted functions may still be supported.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support explicit conversion operators (<code class="computeroutput"><span class="keyword">explicit</span> <span class="keyword">operator</span>
- <span class="identifier">T</span><span class="special">()</span></code>).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_EXTERN_TEMPLATE</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support explicit instantiation forward declarations
- for templates (<code class="computeroutput"><span class="keyword">extern</span> <span class="keyword">template</span> <span class="special">...</span></code>).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FINAL</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support the C++ class-virt-specifier final.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support expanding a variadic template parameter
- pack into a template containing one or more fixed arguments
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support default template arguments for function
- templates.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_ATOMIC</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <atomic>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_ARRAY</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <array>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CHRONO</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <chrono>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CODECVT</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <codecvt>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CONDITION_VARIABLE</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <condition_variable>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_EXCEPTION</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide a C++11 compatible version
- of <exception>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FORWARD_LIST</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <forward_list>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FUNCTIONAL</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide a C++11 compatible version
- of <functional>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FUTURE</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <future>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <initializer_list>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_MUTEX</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <mutex>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RANDOM</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <random>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RATIO</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <ratio>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_REGEX</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <regex>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_SYSTEM_ERROR</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <system_error>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_THREAD</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <thread>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TUPLE</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <tuple>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPEINDEX</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <typeindex>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPE_TRAITS</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <type_traits>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_MAP</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <unordered_map>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_SET</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <unordered_set>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_INLINE_NAMESPACES</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support inline namespaces.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_LAMBDAS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support Lambdas.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not allow to pass local classes as template parameters
- (this macro intentionally does not control passing of unnamed types
- as template parameters, see also <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm" target="_top">N2657</a>).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support defaulted (<code class="computeroutput"><span class="special">=</span>
- <span class="keyword">default</span></code>) functions in access
- control sections other than <code class="computeroutput"><span class="keyword">public</span></code>.
- Public defaulted functions may still be supported, as indicated
- by <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DEFAULTED_FUNCTIONS</span></code>.
- Some compilers implementing an early draft of the C++11 standard
- (in particular, incorporating <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#906" target="_top">DR906</a>)
- are susceptible to this problem.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support <code class="computeroutput"><span class="keyword">noexcept</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NULLPTR</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support <code class="computeroutput"><span class="keyword">nullptr</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NUMERIC_LIMITS</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library <code class="computeroutput"><span class="special"><</span><span class="identifier">limits</span><span class="special">></span></code>
- header does not support the C++11 version of <code class="computeroutput"><span class="identifier">numeric_limits</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_POINTER_TRAITS</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide a C++11 version of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pointer_traits</span></code> in <memory>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RANGE_BASED_FOR</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support range-based for statements.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RAW_LITERALS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support raw string literals.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_REF_QUALIFIERS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support ref-qualifiers on member functions
- as described in <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm" target="_top">N2439</a>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RVALUE_REFERENCES</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support r-value references.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SCOPED_ENUMS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support scoped enumerations (<code class="computeroutput"><span class="keyword">enum</span> <span class="keyword">class</span></code>).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SFINAE_EXPR</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support usage of C++11 SFINAE with arbitrary
- expressions. Use this macro only if you are using all of the features
- of SFINAE including substitution-failure-on-private-member-access.
- Otherwise use BOOST_NO_SFINAE_EXPR or BOOST_NO_SFINAE which get
- defined for fewer compilers.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SMART_PTR</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library header <memory> has no shared_ptr and
- unique_ptr.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STATIC_ASSERT</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support <code class="computeroutput"><span class="keyword">static_assert</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STD_ALIGN</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library header <memory> has no working std::align.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STD_UNORDERED</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not support <unordered_map> and
- <unordered_set>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_TEMPLATE_ALIASES</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support template aliases.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_THREAD_LOCAL</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support the <code class="computeroutput"><span class="keyword">thread_local</span></code>
- storage specifier.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_TRAILING_RESULT_TYPES</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support the new function result type specification
- syntax (e.g. <code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">foo</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span>
- <span class="special">-></span> <span class="identifier">T</span><span class="special">;</span></code>).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNICODE_LITERALS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support Unicode (<code class="computeroutput"><span class="identifier">u8</span></code>,
- <code class="computeroutput"><span class="identifier">u</span></code>, <code class="computeroutput"><span class="identifier">U</span></code>) literals.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support the <a href="http://en.wikipedia.org/wiki/C%2B%2B0x#Uniform_initialization" target="_top">C++11
- Unified Initialization Syntax</a>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_USER_DEFINED_LITERALS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support user defined literals.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_TEMPLATES</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support variadic templates.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_MACROS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support variadic macros.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_LONG_LONG</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support <code class="computeroutput"><span class="keyword">long</span>
- <span class="keyword">long</span></code>.
- </p>
- </td>
- </tr>
- </tbody>
- </table></div>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h3 class="title">
- <a name="boost_config.boost_macro_reference.macros_that_allow_use_of_c__11_features_with_c__03_compilers"></a><a name="config_11_for_03"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__11_features_with_c__03_compilers" title="Macros that allow use of C++11 features with C++03 compilers">Macros
- that allow use of C++11 features with C++03 compilers</a>
- </h3></div></div></div>
- <p>
- The following macros allow use of C++11 features even with compilers that
- do not yet provide compliant C++11 support.
- </p>
- <div class="informaltable"><table class="table">
- <colgroup>
- <col>
- <col>
- </colgroup>
- <thead><tr>
- <th>
- <p>
- Macro
- </p>
- </th>
- <th>
- <p>
- Description
- </p>
- </th>
- </tr></thead>
- <tbody>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>, <code class="computeroutput"><span class="identifier">BOOST_NO_ALIGNMENT</span></code>
- </p>
- </td>
- <td>
- <p>
- Some compilers don't support the <code class="computeroutput"><span class="keyword">alignas</span></code>
- keyword but provide other means to specify alignment (usually,
- through compiler-specific attributes). The macro <code class="computeroutput"><span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>
- will expand to the <code class="computeroutput"><span class="keyword">alignas</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code> keyword if the compiler supports
- it or to some compiler-specific attribute to achieve the specified
- alignment. If no such compiler-specific attribute is known then
- <code class="computeroutput"><span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code> will expand to nothing and <code class="computeroutput"><span class="identifier">BOOST_NO_ALIGNMENT</span></code> will be defined.
- Unlike native <code class="computeroutput"><span class="keyword">alignas</span></code>,
- <code class="computeroutput"><span class="identifier">X</span></code> must always be
- a compile-time integer constant. The macro can be used to specify
- alignment of types and data:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="number">16</span><span class="special">)</span> <span class="identifier">my_data</span>
- <span class="special">{</span>
- <span class="keyword">char</span> <span class="identifier">c</span><span class="special">[</span><span class="number">16</span><span class="special">];</span>
- <span class="special">};</span>
- <span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="number">8</span><span class="special">)</span> <span class="keyword">int</span> <span class="identifier">arr</span><span class="special">[</span><span class="number">32</span><span class="special">];</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_CONSTEXPR</span></code>
- </p>
- </td>
- <td>
- <p>
- Some compilers don't support the use of <code class="computeroutput"><span class="keyword">constexpr</span></code>.
- This macro expands to nothing on those compilers, and <code class="computeroutput"><span class="keyword">constexpr</span></code> elsewhere. For example,
- when defining a constexpr function or constructor replace:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">constexpr</span> <span class="identifier">tuple</span><span class="special">();</span>
- </pre>
- <p>
- with:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_CONSTEXPR</span> <span class="identifier">tuple</span><span class="special">();</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_CONSTEXPR_OR_CONST</span></code>
- </p>
- </td>
- <td>
- <p>
- Some compilers don't support the use of <code class="computeroutput"><span class="keyword">constexpr</span></code>.
- This macro expands to <code class="computeroutput"><span class="keyword">const</span></code>
- on those compilers, and <code class="computeroutput"><span class="keyword">constexpr</span></code>
- elsewhere. For example, when defining const expr variables replace:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
- </pre>
- <p>
- with:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="identifier">BOOST_CONSTEXPR_OR_CONST</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_STATIC_CONSTEXPR</span></code>
- </p>
- </td>
- <td>
- <p>
- This is a shortcut for <code class="computeroutput"><span class="keyword">static</span>
- <span class="identifier">BOOST_CONSTEXPR_OR_CONST</span></code>.
- For example, when defining const expr variables replace:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
- </pre>
- <p>
- with:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_STATIC_CONSTEXPR</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_DEFAULTED_FUNCTION</span><span class="special">(</span><span class="identifier">fun</span><span class="special">,</span> <span class="identifier">body</span><span class="special">)</span></code>
- </p>
- </td>
- <td>
- <p>
- This macro is intended to be used within a class definition in
- order to declare a default implementation of function <code class="computeroutput"><span class="identifier">fun</span></code>. For the compilers that do
- not support C++11 defaulted functions the macro will expand into
- an inline function definition with the <code class="computeroutput"><span class="identifier">body</span></code>
- implementation. For example:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">my_struct</span>
- <span class="special">{</span>
- <span class="identifier">BOOST_DEFAULTED_FUNCTION</span><span class="special">(</span><span class="identifier">my_struct</span><span class="special">(),</span> <span class="special">{})</span>
- <span class="special">};</span>
- </pre>
- <p>
- is equivalent to:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">my_struct</span>
- <span class="special">{</span>
- <span class="identifier">my_struct</span><span class="special">()</span> <span class="special">=</span> <span class="keyword">default</span><span class="special">;</span>
- <span class="special">};</span>
- </pre>
- <p>
- or:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">my_struct</span>
- <span class="special">{</span>
- <span class="identifier">my_struct</span><span class="special">()</span> <span class="special">{}</span>
- <span class="special">};</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_DELETED_FUNCTION</span><span class="special">(</span><span class="identifier">fun</span><span class="special">)</span></code>
- </p>
- </td>
- <td>
- <p>
- This macro is intended to be used within a class definition in
- order to declare a deleted function <code class="computeroutput"><span class="identifier">fun</span></code>.
- For the compilers that do not support C++11 deleted functions the
- macro will expand into a private function declaration with no definition.
- Since the macro may change the access mode, it is recommended to
- use this macro at the end of the class definition. For example:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">noncopyable</span>
- <span class="special">{</span>
- <span class="identifier">BOOST_DELETED_FUNCTION</span><span class="special">(</span><span class="identifier">noncopyable</span><span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&))</span>
- <span class="identifier">BOOST_DELETED_FUNCTION</span><span class="special">(</span><span class="identifier">noncopyable</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&))</span>
- <span class="special">};</span>
- </pre>
- <p>
- is equivalent to:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">noncopyable</span>
- <span class="special">{</span>
- <span class="identifier">noncopyable</span><span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
- <span class="identifier">noncopyable</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
- <span class="special">};</span>
- </pre>
- <p>
- or:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">noncopyable</span>
- <span class="special">{</span>
- <span class="keyword">private</span><span class="special">:</span>
- <span class="identifier">noncopyable</span><span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&);</span>
- <span class="identifier">noncopyable</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&);</span>
- <span class="special">};</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_NOEXCEPT</span>
- <span class="identifier">BOOST_NOEXCEPT_OR_NOTHROW</span>
- <span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span>
- <span class="identifier">BOOST_NOEXCEPT_EXPR</span><span class="special">(</span><span class="identifier">Expression</span><span class="special">)</span>
- </pre>
- <p>
- </p>
- </td>
- <td>
- <p>
- If <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code>
- is defined (i.e. C++03 compliant compilers) these macros are defined
- as:
- </p>
- <div class="blockquote"><blockquote class="blockquote">
- <p>
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT</span>
- <span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_OR_NOTHROW</span> <span class="keyword">throw</span><span class="special">()</span>
- <span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span>
- <span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_EXPR</span><span class="special">(</span><span class="identifier">Expression</span><span class="special">)</span> <span class="keyword">false</span>
- </pre>
- <p>
- </p>
- </blockquote></div>
- <p>
- If <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code>
- is not defined (i.e. C++11 compliant compilers) they are defined
- as:
- </p>
- <div class="blockquote"><blockquote class="blockquote">
- <p>
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT</span> <span class="keyword">noexcept</span>
- <span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_OR_NOTHROW</span> <span class="keyword">noexcept</span>
- <span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">((</span><span class="identifier">Predicate</span><span class="special">))</span>
- <span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_EXPR</span><span class="special">(</span><span class="identifier">Expression</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">((</span><span class="identifier">Expression</span><span class="special">))</span>
- </pre>
- <p>
- </p>
- </blockquote></div>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_FINAL</span></code>
- </p>
- </td>
- <td>
- <p>
- If <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FINAL</span></code>
- is not defined (i.e. C++11 compliant compilers), expands to <code class="computeroutput"><span class="identifier">final</span></code> keyword, otherwise expands
- to nothing.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_MSVC_ENABLE_2012_NOV_CTP</span></code>
- </p>
- </td>
- <td>
- <p>
- For Microsoft Visual C++ 2012, enable the C++11 features supplied
- by the November 2012 Community Technology Preview. These features
- are not automatically enabled because the CTP is non-supported
- alpha code that is not recommended for production use. This macro
- must be defined before including any Boost headers, and must be
- defined for all translation units in the program, including Boost
- library builds. This macro will no longer have any effect once
- an official Microsoft release supports the CTP features.
- </p>
- </td>
- </tr>
- </tbody>
- </table></div>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h3 class="title">
- <a name="boost_config.boost_macro_reference.macros_that_describe_c__14_features_not_supported"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__14_features_not_supported" title="Macros that describe C++14 features not supported">Macros
- that describe C++14 features not supported</a>
- </h3></div></div></div>
- <p>
- The following macros describe features in the 2014 ISO C++ standard, formerly
- known as C++0y, that are not yet supported by a particular compiler or library.
- </p>
- <div class="informaltable"><table class="table">
- <colgroup>
- <col>
- <col>
- </colgroup>
- <thead><tr>
- <th>
- <p>
- Macro
- </p>
- </th>
- <th>
- <p>
- Description
- </p>
- </th>
- </tr></thead>
- <tbody>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_AGGREGATE_NSDMI</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support member initializer for aggregates
- as in the following example:
- </p>
- <div class="blockquote"><blockquote class="blockquote">
- <p>
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">Foo</span>
- <span class="special">{</span>
- <span class="keyword">int</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span> <span class="special">=</span> <span class="number">42</span><span class="special">;</span>
- <span class="special">};</span>
- <span class="identifier">Foo</span> <span class="identifier">foo</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0</span> <span class="special">};</span>
- </pre>
- <p>
- </p>
- </blockquote></div>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_BINARY_LITERALS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not binary literals (e.g. <code class="computeroutput"><span class="number">0</span><span class="identifier">b1010</span></code>).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_CONSTEXPR</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support relaxed <code class="computeroutput"><span class="keyword">constexpr</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_DECLTYPE_AUTO</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support <code class="computeroutput"><span class="keyword">decltype</span><span class="special">(</span><span class="keyword">auto</span><span class="special">)</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_DIGIT_SEPARATORS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support digit separators (e.g. <code class="computeroutput"><span class="number">1</span><span class="char">'000'</span><span class="number">000</span></code>).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_STD_EXCHANGE</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">exchange</span><span class="special">()</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_GENERIC_LAMBDAS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support generic lambda (e.g. <code class="computeroutput"><span class="special">[](</span><span class="keyword">auto</span>
- <span class="identifier">v</span><span class="special">){</span>
- <span class="special">}</span></code>).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_HDR_SHARED_MUTEX</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library does not provide header <shared_mutex>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support initialized lambda capture (e.g.
- <code class="computeroutput"><span class="special">[</span><span class="identifier">foo</span>
- <span class="special">=</span> <span class="number">42</span><span class="special">]{</span> <span class="special">}</span></code>).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support return type deduction for normal
- functions (e.g. <code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">f</span><span class="special">()</span>
- <span class="special">{</span> <span class="keyword">return</span>
- <span class="identifier">val</span><span class="special">;</span>
- <span class="special">}</span></code>).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_VARIABLE_TEMPLATES</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support variable template (e.g. <code class="computeroutput"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="identifier">T</span>
- <span class="identifier">kibi</span> <span class="special">=</span>
- <span class="identifier">T</span><span class="special">(</span><span class="number">1024</span><span class="special">);</span></code>).
- </p>
- </td>
- </tr>
- </tbody>
- </table></div>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h3 class="title">
- <a name="boost_config.boost_macro_reference.macros_that_allow_use_of_c__14_features_with_c__11_or_earlier_compilers"></a><a name="config_14_for_11"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__14_features_with_c__11_or_earlier_compilers" title="Macros that allow use of C++14 features with C++11 or earlier compilers">Macros
- that allow use of C++14 features with C++11 or earlier compilers</a>
- </h3></div></div></div>
- <p>
- The following macros allow use of C++14 features even with compilers that
- do not yet provide compliant C++14 support.
- </p>
- <div class="informaltable"><table class="table">
- <colgroup>
- <col>
- <col>
- </colgroup>
- <thead><tr>
- <th>
- <p>
- Macro
- </p>
- </th>
- <th>
- <p>
- Description
- </p>
- </th>
- </tr></thead>
- <tbody><tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_CXX14_CONSTEXPR</span></code>
- </p>
- </td>
- <td>
- <p>
- This macro works similar to <code class="computeroutput"><span class="identifier">BOOST_CONSTEXPR</span></code>,
- but expands to <code class="computeroutput"><span class="keyword">constexpr</span></code>
- only if the C++14 "relaxed" <code class="computeroutput"><span class="keyword">constexpr</span></code>
- is available.
- </p>
- </td>
- </tr></tbody>
- </table></div>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h3 class="title">
- <a name="boost_config.boost_macro_reference.macros_that_describe_c__17_features_not_supported"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__17_features_not_supported" title="Macros that describe C++17 features not supported">Macros
- that describe C++17 features not supported</a>
- </h3></div></div></div>
- <p>
- The following macros describe features in the 2017 ISO C++ standard, formerly
- known as C++1z, that are not yet supported by a particular compiler or library.
- </p>
- <div class="informaltable"><table class="table">
- <colgroup>
- <col>
- <col>
- </colgroup>
- <thead><tr>
- <th>
- <p>
- Macro
- </p>
- </th>
- <th>
- <p>
- Description
- </p>
- </th>
- </tr></thead>
- <tbody>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_HDR_OPTIONAL</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support the header <code class="computeroutput"><span class="special"><</span><span class="identifier">optional</span><span class="special">></span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_HDR_VARIANT</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support the header <code class="computeroutput"><span class="special"><</span><span class="identifier">variant</span><span class="special">></span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_HDR_STRING_VIEW</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support the header <code class="computeroutput"><span class="special"><</span><span class="identifier">string_view</span><span class="special">></span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_STD_APPLY</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">apply</span><span class="special">()</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_STD_INVOKE</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">invoke</span><span class="special">()</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_ITERATOR_TRAITS</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support SFINAE-friendly <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_IF_CONSTEXPR</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support <code class="computeroutput"><span class="keyword">if</span>
- <span class="keyword">constexpr</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_INLINE_VARIABLES</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler does not support <code class="computeroutput"><span class="keyword">inline</span></code>
- variables.
- </p>
- </td>
- </tr>
- </tbody>
- </table></div>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h3 class="title">
- <a name="boost_config.boost_macro_reference.macros_that_allow_use_of_c__17_features_with_c__14_or_earlier_compilers"></a><a name="config_17_for_14"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__17_features_with_c__14_or_earlier_compilers" title="Macros that allow use of C++17 features with C++14 or earlier compilers">Macros
- that allow use of C++17 features with C++14 or earlier compilers</a>
- </h3></div></div></div>
- <p>
- The following macros allow use of C++17 features even with compilers that
- do not yet provide compliant C++17 support.
- </p>
- <div class="informaltable"><table class="table">
- <colgroup>
- <col>
- <col>
- </colgroup>
- <thead><tr>
- <th>
- <p>
- Macro
- </p>
- </th>
- <th>
- <p>
- Description
- </p>
- </th>
- </tr></thead>
- <tbody><tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_INLINE_VARIABLE</span></code>
- </p>
- </td>
- <td>
- <p>
- This macro expands to <code class="computeroutput"><span class="keyword">inline</span></code>
- on compilers that support C++17 inline variables and to nothing
- otherwise. Users may need to check for <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_INLINE_VARIABLES</span></code>
- for further adjustments to the code.
- </p>
- </td>
- </tr></tbody>
- </table></div>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h3 class="title">
- <a name="boost_config.boost_macro_reference.macros_that_describe_features_that_have_been_removed_from_the_standard_"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_features_that_have_been_removed_from_the_standard_" title="Macros that describe features that have been removed from the standard.">Macros
- that describe features that have been removed from the standard.</a>
- </h3></div></div></div>
- <p>
- The following macros describe features which were required by one version
- of the standard, but have been removed by later versions.
- </p>
- <div class="informaltable"><table class="table">
- <colgroup>
- <col>
- <col>
- </colgroup>
- <thead><tr>
- <th>
- <p>
- Macro
- </p>
- </th>
- <th>
- <p>
- Description
- </p>
- </th>
- </tr></thead>
- <tbody>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX98_RANDOM_SHUFFLE</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">random_shuffle</span><span class="special">()</span></code>. It was deprecated in C++11 and
- is removed from C++14.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_PTR</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span></code>.
- It was deprecated in C++11 and is removed from C++14.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX98_FUNCTION_BASE</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">unary_function</span></code>
- and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">binary_function</span></code>. They were deprecated
- in C++11 and is removed from C++14.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX98_BINDERS</span></code>
- </p>
- </td>
- <td>
- <p>
- The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bind1st</span></code>,
- <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bind2nd</span></code>, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ptr_fun</span></code>
- and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">mem_fun</span></code>. They were deprecated
- in C++11 and is removed from C++14.
- </p>
- </td>
- </tr>
- </tbody>
- </table></div>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h3 class="title">
- <a name="boost_config.boost_macro_reference.boost_helper_macros"></a><a name="config_helpers"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_helper_macros" title="Boost Helper Macros">Boost
- Helper Macros</a>
- </h3></div></div></div>
- <p>
- The following macros are either simple helpers, or macros that provide workarounds
- for compiler/standard library defects.
- </p>
- <div class="informaltable"><table class="table">
- <colgroup>
- <col>
- <col>
- </colgroup>
- <thead><tr>
- <th>
- <p>
- Macro
- </p>
- </th>
- <th>
- <p>
- Description
- </p>
- </th>
- </tr></thead>
- <tbody>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_WORKAROUND</span></code>
- </p>
- </td>
- <td>
- <p>
- This macro is used where a compiler specific workaround is required
- that is not otherwise described by one of the other Boost.Config
- macros. To use the macro you must first
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">workaround</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
- </pre>
- <p>
- usage is then:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#if</span> <span class="identifier">BOOST_WORKAROUND</span><span class="special">(</span><span class="identifier">MACRONAME</span><span class="special">,</span> <span class="identifier">CONDITION</span><span class="special">)</span>
- <span class="comment">// workaround code goes here...</span>
- <span class="preprocessor">#else</span>
- <span class="comment">// Standard conforming code goes here...</span>
- <span class="preprocessor">#endif</span>
- </pre>
- <p>
- where <code class="computeroutput"><span class="identifier">MACRONAME</span></code>
- is a macro that usually describes the version number to be tested
- against, and <code class="computeroutput"><span class="identifier">CONDITION</span></code>
- is a comparison operator followed by a value. For example <code class="computeroutput"><span class="identifier">BOOST_WORKAROUND</span><span class="special">(</span><span class="identifier">BOOST_INTEL</span><span class="special">,</span>
- <span class="special"><=</span> <span class="number">1010</span><span class="special">)</span></code> would evaluate to <code class="computeroutput"><span class="number">1</span></code> for Intel C++ 10.1 and earlier.
- </p>
- <p>
- The macro can also be used with <code class="computeroutput"><span class="identifier">BOOST_TESTED_AT</span></code>
- if all current compiler versions exhibit the issue, but the issue
- is expected to be fixed at some later point.
- </p>
- <p>
- For example <code class="computeroutput"><span class="identifier">BOOST_WORKAROUND</span><span class="special">(</span><span class="identifier">__BORLANDC__</span><span class="special">,</span> <span class="identifier">BOOST_TESTED_AT</span><span class="special">(</span><span class="number">0x590</span><span class="special">))</span></code> would normally evaluate to <code class="computeroutput"><span class="number">1</span></code> for all values of <code class="computeroutput"><span class="identifier">__BORLANDC__</span></code> <span class="emphasis"><em>unless</em></span>
- the macro <code class="computeroutput"><span class="identifier">BOOST_DETECT_OUTDATED_WORKAROUNDS</span></code>
- is defined, in which case evaluates to <code class="computeroutput"><span class="special">(</span><span class="identifier">__BORLANDC__</span> <span class="special"><=</span>
- <span class="number">0x590</span><span class="special">)</span></code>.
- </p>
- <p>
- <span class="bold"><strong>Note</strong></span>: the ultimate source of documentation
- for this macro is in <a href="../../../../../boost/config/workaround.hpp" target="_top">boost/config/workaround.hpp</a>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_PREVENT_MACRO_SUBSTITUTION</span></code>
- </p>
- </td>
- <td>
- <p>
- Sometimes you have a function name with the same name as a C macro,
- for example "min" and "max" member functions,
- in which case one can prevent the function being expanded as a
- macro using:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">someclass</span><span class="special">.</span><span class="identifier">min</span> <span class="identifier">BOOST_PREVENT_MACRO_SUBSTITUTION</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">);</span>
- </pre>
- <p>
- The following also works in most, but not all, contexts:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">(</span><span class="identifier">someclass</span><span class="special">.</span><span class="identifier">max</span><span class="special">)(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">);</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_DEDUCED_TYPENAME</span></code>
- </p>
- </td>
- <td>
- <p>
- Some compilers don't support the use of typename for dependent
- types in deduced contexts. This macro expands to nothing on those
- compilers, and typename elsewhere. For example, replace: <code class="computeroutput"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">void</span>
- <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">,</span>
- <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">type</span><span class="special">);</span></code> with: <code class="computeroutput"><span class="keyword">template</span>
- <span class="special"><</span><span class="keyword">class</span>
- <span class="identifier">T</span><span class="special">></span>
- <span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">BOOST_DEDUCED_TYPENAME</span>
- <span class="identifier">T</span><span class="special">::</span><span class="identifier">type</span><span class="special">);</span></code>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HASH_MAP_HEADER</span></code>
- </p>
- </td>
- <td>
- <p>
- The header to include to get the SGI <code class="computeroutput"><span class="identifier">hash_map</span></code>
- class. This macro is only available if <code class="computeroutput"><span class="identifier">BOOST_HAS_HASH</span></code>
- is defined.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HASH_SET_HEADER</span></code>
- </p>
- </td>
- <td>
- <p>
- The header to include to get the SGI <code class="computeroutput"><span class="identifier">hash_set</span></code>
- class. This macro is only available if <code class="computeroutput"><span class="identifier">BOOST_HAS_HASH</span></code>
- is defined.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_SLIST_HEADER</span></code>
- </p>
- </td>
- <td>
- <p>
- The header to include to get the SGI <code class="computeroutput"><span class="identifier">slist</span></code>
- class. This macro is only available if <code class="computeroutput"><span class="identifier">BOOST_HAS_SLIST</span></code>
- is defined.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_STD_EXTENSION_NAMESPACE</span></code>
- </p>
- </td>
- <td>
- <p>
- The namespace used for std library extensions (hashtable classes
- etc).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_STATIC_CONSTANT</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">assignment</span><span class="special">)</span></code>
- </p>
- </td>
- <td>
- <p>
- On compilers which don't allow in-class initialization of static
- integral constant members, we must use enums as a workaround if
- we want the constants to be available at compile-time. This macro
- gives us a convenient way to declare such constants. For example
- instead of:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">{</span>
- <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">value</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
- <span class="special">};</span>
- </pre>
- <p>
- use:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">{</span>
- <span class="identifier">BOOST_STATIC_CONSTANT</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">value</span> <span class="special">=</span> <span class="number">2</span><span class="special">);</span>
- <span class="special">};</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_UNREACHABLE_RETURN</span><span class="special">(</span><span class="identifier">result</span><span class="special">)</span></code>
- </p>
- </td>
- <td>
- <p>
- Normally evaluates to nothing, but evaluates to return x; if the
- compiler requires a return, even when it can never be reached.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_FALLTHROUGH</span></code>
- </p>
- </td>
- <td>
- <p>
- The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through
- between switch labels:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">switch</span> <span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">{</span>
- <span class="keyword">case</span> <span class="number">40</span><span class="special">:</span>
- <span class="keyword">case</span> <span class="number">41</span><span class="special">:</span>
- <span class="keyword">if</span> <span class="special">(</span><span class="identifier">truth_is_out_there</span><span class="special">)</span> <span class="special">{</span>
- <span class="special">++</span><span class="identifier">x</span><span class="special">;</span>
- <span class="identifier">BOOST_FALLTHROUGH</span><span class="special">;</span> <span class="comment">// Use instead of/along with annotations in </span>
- <span class="comment">// comments. </span>
- <span class="special">}</span> <span class="keyword">else</span> <span class="special">{</span>
- <span class="keyword">return</span> <span class="identifier">x</span><span class="special">;</span>
- <span class="special">}</span>
- <span class="keyword">case</span> <span class="number">42</span><span class="special">:</span>
- <span class="special">...</span>
- </pre>
- <p>
- As shown in the example above, the BOOST_FALLTHROUGH macro should
- be followed by a semicolon. It is designed to mimic control-flow
- statements like 'break;', so it can be placed in most places where
- 'break;' can, but only if there are no statements on the execution
- path between it and the next switch label.
- </p>
- <p>
- When compiled with Clang >3.2 in C++11 mode, the BOOST_FALLTHROUGH
- macro is expanded to <code class="computeroutput"><span class="special">[[</span><span class="identifier">clang</span><span class="special">::</span><span class="identifier">fallthrough</span><span class="special">]]</span></code>
- attribute, which is analysed when performing switch labels fall-through
- diagnostic ('-Wimplicit-fallthrough'). See clang <a href="http://clang.llvm.org/docs/LanguageExtensions.html#clang__fallthrough" target="_top">documentation
- on language extensions for details.</a>
- </p>
- <p>
- When used with unsupported compilers, the BOOST_FALLTHROUGH macro
- has no effect on diagnostics.
- </p>
- <p>
- In either case this macro has no effect on runtime behavior and
- performance of code.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_EXPLICIT_TEMPLATE_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span></code>
- </p>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_EXPLICIT_TEMPLATE_NON_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span><span class="identifier">v</span><span class="special">)</span></code>
- </p>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span></code>
- </p>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span><span class="identifier">v</span><span class="special">)</span></code>
- </p>
- </td>
- <td>
- <p>
- Some compilers silently "fold" different function template
- instantiations if some of the template parameters don't appear
- in the function parameter list. For instance:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span>
- <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">ostream</span><span class="special">></span>
- <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">typeinfo</span><span class="special">></span>
- <span class="keyword">template</span> <span class="special"><</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">></span>
- <span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">n</span> <span class="special"><<</span> <span class="char">' '</span><span class="special">;</span> <span class="special">}</span>
- <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
- <span class="keyword">void</span> <span class="identifier">g</span><span class="special">()</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">T</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special"><<</span> <span class="char">' '</span><span class="special">;</span> <span class="special">}</span>
- <span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
- <span class="identifier">f</span><span class="special"><</span><span class="number">1</span><span class="special">>();</span>
- <span class="identifier">f</span><span class="special"><</span><span class="number">2</span><span class="special">>();</span>
- <span class="identifier">g</span><span class="special"><</span><span class="keyword">int</span><span class="special">>();</span>
- <span class="identifier">g</span><span class="special"><</span><span class="keyword">double</span><span class="special">>();</span>
- <span class="special">}</span>
- </pre>
- <p>
- incorrectly outputs <code class="literal">2 2 double double</code> on VC++
- 6. These macros, to be used in the function parameter list, fix
- the problem without effects on the calling syntax. For instance,
- in the case above write:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">></span>
- <span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">BOOST_EXPLICIT_TEMPLATE_NON_TYPE</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">n</span><span class="special">))</span> <span class="special">{</span> <span class="special">...</span> <span class="special">}</span>
- <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
- <span class="keyword">void</span> <span class="identifier">g</span><span class="special">(</span><span class="identifier">BOOST_EXPLICIT_TEMPLATE_TYPE</span><span class="special">(</span><span class="identifier">T</span><span class="special">))</span> <span class="special">{</span> <span class="special">...</span> <span class="special">}</span>
- </pre>
- <p>
- Beware that they can declare (for affected compilers) a dummy defaulted
- parameter, so they
- </p>
- <p>
- <span class="bold"><strong>a)</strong></span> should be always invoked <span class="bold"><strong>at the end</strong></span> of the parameter list
- </p>
- <p>
- <span class="bold"><strong>b)</strong></span> can't be used if your function
- template is multiply declared.
- </p>
- <p>
- Furthermore, in order to add any needed comma separator, an <code class="computeroutput"><span class="identifier">APPEND_</span><span class="special">*</span></code>
- version must be used when the macro invocation appears after a
- normal parameter declaration or after the invocation of another
- macro of this same group.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_USE_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">)</span></code>
- </p>
- </td>
- <td>
- <p>
- When the standard library does not have a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code> there are various workarounds
- available, but they differ from library to library. This macro
- provides a consistent way to access a locale's facets. For example,
- replace: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span><span class="special"><</span><span class="identifier">Type</span><span class="special">>(</span><span class="identifier">loc</span><span class="special">);</span></code>
- with: <code class="computeroutput"><span class="identifier">BOOST_USE_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">);</span></code> Note do not add a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span></code>
- prefix to the front of <code class="computeroutput"><span class="identifier">BOOST_USE_FACET</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">)</span></code>
- </p>
- </td>
- <td>
- <p>
- When the standard library does not have a comforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">has_facet</span></code> there are various workarounds
- available, but they differ from library to library. This macro
- provides a consistent way to check a locale's facets. For example,
- replace: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">has_facet</span><span class="special"><</span><span class="identifier">Type</span><span class="special">>(</span><span class="identifier">loc</span><span class="special">);</span></code>
- with: <code class="computeroutput"><span class="identifier">BOOST_HAS_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">);</span></code> Note do not add a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span></code>
- prefix to the front of <code class="computeroutput"><span class="identifier">BOOST_HAS_FACET</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NESTED_TEMPLATE</span></code>
- </p>
- </td>
- <td>
- <p>
- Member templates are supported by some compilers even though they
- can't use the <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="keyword">template</span>
- <span class="identifier">member</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span></code>
- syntax, as a workaround replace: <code class="computeroutput"><span class="keyword">typedef</span>
- <span class="keyword">typename</span> <span class="identifier">A</span><span class="special">::</span><span class="keyword">template</span>
- <span class="identifier">rebind</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span>
- <span class="identifier">binder</span><span class="special">;</span></code>
- with: <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">typename</span>
- <span class="identifier">A</span><span class="special">::</span><span class="identifier">BOOST_NESTED_TEMPLATE</span> <span class="identifier">rebind</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="identifier">binder</span><span class="special">;</span></code>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_STRINGIZE</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>
- </p>
- </td>
- <td>
- <p>
- Converts the parameter <code class="computeroutput"><span class="identifier">X</span></code>
- to a string after macro replacement on <code class="computeroutput"><span class="identifier">X</span></code>
- has been performed.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_JOIN</span><span class="special">(</span><span class="identifier">X</span><span class="special">,</span><span class="identifier">Y</span><span class="special">)</span></code>
- </p>
- </td>
- <td>
- <p>
- This piece of macro magic joins the two arguments together, even
- when one of the arguments is itself a macro (see 16.3.1 in C++
- standard). This is normally used to create a mangled name in combination
- with a predefined macro such a __LINE__.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_RESTRICT</span></code>
- </p>
- </td>
- <td>
- <p>
- This macro can be used in place of the compiler specific variant
- of the C99 <code class="computeroutput"><span class="identifier">restrict</span></code>
- keyword to notify the compiler that, for the lifetime of the qualified
- pointer variable, only it and its derivative value will be used
- to gain access to the object it references. This limits the effect
- of pointer aliasing and helps the optimizers in generating better
- code. However, i this condition is violated, undefined behavior
- may occurs.
- </p>
- <p>
- Usage example:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">perform_computation</span><span class="special">(</span> <span class="keyword">float</span><span class="special">*</span> <span class="identifier">BOOST_RESTRICT</span> <span class="identifier">in</span><span class="special">,</span> <span class="keyword">float</span><span class="special">*</span> <span class="identifier">BOOST_RESTRICT</span> <span class="identifier">out</span> <span class="special">)</span>
- <span class="special">{</span>
- <span class="special">*</span><span class="identifier">out</span> <span class="special">=</span> <span class="special">*</span><span class="identifier">in</span> <span class="special">*</span> <span class="number">0.5f</span><span class="special">;</span>
- <span class="special">}</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_FORCEINLINE</span></code>
- </p>
- </td>
- <td>
- <p>
- This macro can be used in place of the <code class="computeroutput"><span class="keyword">inline</span></code>
- keyword to instruct the compiler that the function should always
- be inlined. Overuse of this macro can lead to significant bloat,
- while good use can increase performance in certain cases, such
- as computation-intensive code built through generative programming
- techniques.
- </p>
- <p>
- Usage example:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
- <span class="identifier">BOOST_FORCEINLINE</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">&</span> <span class="identifier">t</span><span class="special">)</span>
- <span class="special">{</span>
- <span class="keyword">return</span> <span class="identifier">t</span><span class="special">;</span>
- <span class="special">}</span>
- </pre>
- <p>
- </p>
- <p>
- Note that use of this macro can lead to cryptic error messages
- with some compilers. Consider defining it to <code class="computeroutput"><span class="keyword">inline</span></code>
- before including the Boost.Config header in order to be able to
- debug errors more easily.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NOINLINE</span></code>
- </p>
- </td>
- <td>
- <p>
- This macro can be used in place of the <code class="computeroutput"><span class="keyword">inline</span></code>
- keyword to instruct the compiler that the function should never
- be inlined. One should typically use this macro to mark functions
- that are unlikely to be called, such as error handling routines.
- </p>
- <p>
- Usage example:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_NOINLINE</span> <span class="keyword">void</span> <span class="identifier">handle_error</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">descr</span><span class="special">)</span>
- <span class="special">{</span>
- <span class="comment">// ...</span>
- <span class="special">}</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NORETURN</span></code>
- </p>
- </td>
- <td>
- <p>
- This macro can be used before the function declaration or definition
- to instruct the compiler that the function does not return normally
- (i.e. with a <code class="computeroutput"><span class="keyword">return</span></code>
- statement or by leaving the function scope, if the function return
- type is <code class="computeroutput"><span class="keyword">void</span></code>). The
- macro can be used to mark functions that always throw exceptions
- or terminate the application. Compilers that support this markup
- may use this information to specifically organize the code surrounding
- calls to this function and suppress warnings about missing <code class="computeroutput"><span class="keyword">return</span></code> statements in the functions
- enclosing such calls.
- </p>
- <p>
- Usage example:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_NORETURN</span> <span class="keyword">void</span> <span class="identifier">on_error_occurred</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">descr</span><span class="special">)</span>
- <span class="special">{</span>
- <span class="keyword">throw</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span><span class="special">(</span><span class="identifier">descr</span><span class="special">);</span>
- <span class="special">}</span>
- </pre>
- <p>
- </p>
- <p>
- If the compiler does not support this markup, <code class="computeroutput"><span class="identifier">BOOST_NORETURN</span></code>
- is defined empty and an additional macro <code class="computeroutput"><span class="identifier">BOOST_NO_NORETURN</span></code>
- is defined.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_LIKELY</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>
- </p>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_UNLIKELY</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>
- </p>
- </td>
- <td>
- <p>
- These macros communicate to the compiler that the conditional expression
- <code class="computeroutput"><span class="identifier">X</span></code> is likely or
- unlikely to yield a positive result. The expression should result
- in a boolean value. The result of the macro is an integer or boolean
- value equivalent to the result of <code class="computeroutput"><span class="identifier">X</span></code>.
- </p>
- <p>
- The macros are intended to be used in branching statements. The
- additional hint they provide can be used by the compiler to arrange
- the compiled code of the branches more effectively.
- </p>
- <p>
- Usage example:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">if</span> <span class="special">(</span><span class="identifier">BOOST_UNLIKELY</span><span class="special">(</span><span class="identifier">ptr</span> <span class="special">==</span> <span class="identifier">NULL</span><span class="special">))</span>
- <span class="identifier">handle_error</span><span class="special">(</span><span class="string">"ptr is NULL"</span><span class="special">);</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_ATTRIBUTE_UNUSED</span></code>
- </p>
- </td>
- <td>
- <p>
- Expands to <code class="computeroutput"><span class="identifier">__attribute__</span><span class="special">((</span><span class="identifier">unused</span><span class="special">))</span></code> when this is available - can
- be used to disable compiler warnings relating to unused types or
- variables.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_ATTRIBUTE_NODISCARD</span></code>
- </p>
- </td>
- <td>
- <p>
- Expands to <code class="computeroutput"><span class="special">[[</span><span class="identifier">nodiscard</span><span class="special">]]</span></code> when this is available - can
- be used to create a warning when a type or variable is unused.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS</span></code>
- </p>
- </td>
- <td>
- <p>
- Expands to <code class="computeroutput"><span class="special">[[</span><span class="identifier">no_unique_address</span><span class="special">]]</span></code> when this is available - can
- be used to indicate that a non-static data member need not have
- a unique address (for example empty classes).
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_MAY_ALIAS</span></code>,
- <code class="computeroutput"><span class="identifier">BOOST_NO_MAY_ALIAS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_MAY_ALIAS</span></code>
- expands to a type attribute that can be used to mark types that
- may alias other types. Pointers or references to such marked types
- can be used to access objects of other types. If the compiler supports
- this feature <code class="computeroutput"><span class="identifier">BOOST_NO_MAY_ALIAS</span></code>
- is not defined. Otherwise <code class="computeroutput"><span class="identifier">BOOST_MAY_ALIAS</span></code>
- expands to nothing and <code class="computeroutput"><span class="identifier">BOOST_NO_MAY_ALIAS</span></code>
- is defined.
- </p>
- <p>
- Usage example:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">BOOST_MAY_ALIAS</span> <span class="identifier">aliasing_struct</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">BOOST_MAY_ALIAS</span> <span class="identifier">aliasing_uint</span><span class="special">;</span>
- </pre>
- <p>
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span><span class="special">(</span><span class="identifier">M</span><span class="special">)</span></code>
- </p>
- </td>
- <td>
- <p>
- Defined in header <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">pragma_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>,
- this macro expands to the equivalent of <code class="computeroutput"><span class="preprocessor">#pragma</span>
- <span class="identifier">message</span><span class="special">(</span><span class="identifier">M</span><span class="special">)</span></code>.
- <code class="computeroutput"><span class="identifier">M</span></code> must be a string
- literal.
- </p>
- <p>
- Example: <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span><span class="special">(</span><span class="string">"This header
- is deprecated."</span><span class="special">)</span></code>
- </p>
- <p>
- The messages issued by <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span></code>
- can be suppressed by defining the macro <code class="computeroutput"><span class="identifier">BOOST_DISABLE_PRAGMA_MESSAGE</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HEADER_DEPRECATED</span><span class="special">(</span><span class="identifier">A</span><span class="special">)</span></code>
- </p>
- </td>
- <td>
- <p>
- Defined in header <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">header_deprecated</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>,
- this macro issues the message "This header is deprecated.
- Use <code class="computeroutput"><span class="identifier">A</span></code> instead."
- via <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span></code>.
- <code class="computeroutput"><span class="identifier">A</span></code> must be a string
- literal.
- </p>
- <p>
- Example: <code class="computeroutput"><span class="identifier">BOOST_HEADER_DEPRECATED</span><span class="special">(</span><span class="string">"<boost/config/workaround.hpp>"</span><span class="special">)</span></code>
- </p>
- <p>
- The messages issued by <code class="computeroutput"><span class="identifier">BOOST_HEADER_DEPRECATED</span></code>
- can be suppressed by defining the macro <code class="computeroutput"><span class="identifier">BOOST_ALLOW_DEPRECATED_HEADERS</span></code>.
- </p>
- </td>
- </tr>
- </tbody>
- </table></div>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h3 class="title">
- <a name="boost_config.boost_macro_reference.boost_informational_macros"></a><a name="config_info_macros"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_informational_macros" title="Boost Informational Macros">Boost
- Informational Macros</a>
- </h3></div></div></div>
- <p>
- The following macros describe boost features; these are, generally speaking
- the only boost macros that should be tested in user code.
- </p>
- <div class="informaltable"><table class="table">
- <colgroup>
- <col>
- <col>
- <col>
- </colgroup>
- <thead><tr>
- <th>
- <p>
- Macro
- </p>
- </th>
- <th>
- <p>
- Header
- </p>
- </th>
- <th>
- <p>
- Description
- </p>
- </th>
- </tr></thead>
- <tbody>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_VERSION</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">version</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- </p>
- </td>
- <td>
- <p>
- Describes the boost version number in XYYYZZ format such that:
- <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_VERSION</span>
- <span class="special">%</span> <span class="number">100</span><span class="special">)</span></code> is the sub-minor version, <code class="computeroutput"><span class="special">((</span><span class="identifier">BOOST_VERSION</span>
- <span class="special">/</span> <span class="number">100</span><span class="special">)</span> <span class="special">%</span> <span class="number">1000</span><span class="special">)</span></code>
- is the minor version, and <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_VERSION</span> <span class="special">/</span>
- <span class="number">100000</span><span class="special">)</span></code>
- is the major version.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_INT64_T</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">cstdint</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
- </p>
- </td>
- <td>
- <p>
- Defined if there are no 64-bit integral types: <code class="computeroutput"><span class="identifier">int64_t</span></code>,
- <code class="computeroutput"><span class="identifier">uint64_t</span></code> etc.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_INTEGRAL_INT64_T</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">cstdint</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
- </p>
- </td>
- <td>
- <p>
- Defined if <code class="computeroutput"><span class="identifier">int64_t</span></code>
- as defined by <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">cstdint</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- is not usable in integral constant expressions.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_MSVC</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- </p>
- </td>
- <td>
- <p>
- Defined if the compiler is really Microsoft Visual C++, as opposed
- to one of the many other compilers that also define <code class="computeroutput"><span class="identifier">_MSC_VER</span></code>. Has the same value
- as _MSC_VER.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_MSVC_FULL_VER</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- </p>
- </td>
- <td>
- <p>
- Defined to a normalised 9 digit version of _MSC_FULL_VER (which
- sometimes only has 8 digits), the macro has the form VVMMPPPPP
- where VV is the major version number, MM is the minor version number,
- and PPPPP is the compiler build number.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_GCC</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- </p>
- </td>
- <td>
- <p>
- Defined if the compiler is really GCC, as opposed to one of the
- many other compilers that also define <code class="computeroutput"><span class="identifier">__GNUC__</span></code>.
- Has the value: <code class="computeroutput"><span class="identifier">__GNUC__</span>
- <span class="special">*</span> <span class="number">10000</span>
- <span class="special">+</span> <span class="identifier">__GNUC_MINOR__</span>
- <span class="special">*</span> <span class="number">100</span>
- <span class="special">+</span> <span class="identifier">__GNUC_PATCHLEVEL__</span></code>.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_INTEL</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- </p>
- </td>
- <td>
- <p>
- Defined if the compiler is an Intel compiler, takes the same value
- as the compiler version macro.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_CLANG</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- </p>
- </td>
- <td>
- <p>
- Defined to 1 if the compiler is the Clang compiler.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_WINDOWS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- </p>
- </td>
- <td>
- <p>
- Defined if the Windows platform API is available.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_DINKUMWARE_STDLIB</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- </p>
- </td>
- <td>
- <p>
- Defined if the dinkumware standard library is in use, takes the
- same value as the Dinkumware library version macro <code class="computeroutput"><span class="identifier">_CPPLIB_VER</span></code> if defined, otherwise
- 1.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_WREGEX</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- </p>
- </td>
- <td>
- <p>
- Defined if the regex library does not support wide character regular
- expressions.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_COMPILER</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- </p>
- </td>
- <td>
- <p>
- Defined as a string describing the name and version number of the
- compiler in use. Mainly for debugging the configuration.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_STDLIB</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- </p>
- </td>
- <td>
- <p>
- Defined as a string describing the name and version number of the
- standard library in use. Mainly for debugging the configuration.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_PLATFORM</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- </p>
- </td>
- <td>
- <p>
- Defined as a string describing the name of the platform. Mainly
- for debugging the configuration.
- </p>
- </td>
- </tr>
- </tbody>
- </table></div>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h3 class="title">
- <a name="boost_config.boost_macro_reference.boost_deprecated_macros"></a><a name="deprecated_macros"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_deprecated_macros" title="Boost Deprecated Macros">Boost
- Deprecated Macros</a>
- </h3></div></div></div>
- <p>
- The following have been deprecated; please use the replacements instead.
- They will be removed in a future version of boost.
- </p>
- <div class="informaltable"><table class="table">
- <colgroup>
- <col>
- <col>
- <col>
- <col>
- </colgroup>
- <thead><tr>
- <th>
- <p>
- Deprecated Macro
- </p>
- </th>
- <th>
- <p>
- Replacement
- </p>
- </th>
- <th>
- <p>
- When deprecated
- </p>
- </th>
- <th>
- <p>
- When removed
- </p>
- </th>
- </tr></thead>
- <tbody>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_ARRAY</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_ARRAY</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CHRONO</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CHRONO</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CODECVT</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CODECVT</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CONDITION_VARIABLE</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CONDITION_VARIABLE</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_FORWARD_LIST</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FORWARD_LIST</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_FUTURE</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FUTURE</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_INITIALIZER_LIST</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_INITIALIZER_LISTS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_MUTEX</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_MUTEX</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_RANDOM</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RANDOM</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_RATIO</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RATIO</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_REGEX</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_REGEX</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_SYSTEM_ERROR</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_SYSTEM_ERROR</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_THREAD</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_THREAD</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TUPLE</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TUPLE</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TYPE_TRAITS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPE_TRAITS</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TYPEINDEX</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPEINDEX</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_UNORDERED_SET</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_SET</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_UNORDERED_MAP</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_MAP</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STD_UNORDERED</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_SET</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.50
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- </td>
- <td>
- </td>
- <td>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_DECLARATIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_AUTO_DECLARATIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_MULTIDECLARATIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CHAR16_T</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR16_T</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CHAR32_T</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR32_T</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATE_ALIASES</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_TEMPLATE_ALIASES</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CONSTEXPR</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CONSTEXPR</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_DECLTYPE</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DECLTYPE</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_DECLTYPE_N3276</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DECLTYPE_N3276</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_DEFAULTED_FUNCTIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DEFAULTED_FUNCTIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_DELETED_FUNCTIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DELETED_FUNCTIONS</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_EXPLICIT_CONVERSION_OPERATORS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_EXTERN_TEMPLATE</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_EXTERN_TEMPLATE</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_LAMBDAS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_LAMBDAS</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_NOEXCEPT</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_NULLPTR</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NULLPTR</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_RAW_LITERALS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RAW_LITERALS</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_RVALUE_REFERENCES</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RVALUE_REFERENCES</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_SCOPED_ENUMS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SCOPED_ENUMS</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STATIC_ASSERT</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STATIC_ASSERT</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_STD_UNORDERED</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STD_UNORDERED</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_UNICODE_LITERALS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNICODE_LITERALS</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_VARIADIC_TEMPLATES</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_TEMPLATES</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_VARIADIC_MACROS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_MACROS</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_NUMERIC_LIMITS_LOWEST</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NUMERIC_LIMITS</span></code>
- </p>
- </td>
- <td>
- <p>
- Boost 1.51
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- </td>
- <td>
- </td>
- <td>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_STATIC_ASSERT</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STATIC_ASSERT</span></code>
- (negated)
- </p>
- </td>
- <td>
- <p>
- Boost 1.53
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_VARIADIC_TMPL</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_TEMPLATES</span></code>
- (negated)
- </p>
- </td>
- <td>
- <p>
- Boost 1.53
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_RVALUE_REFS</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RVALUE_REFERENCES</span></code>
- (negated)
- </p>
- </td>
- <td>
- <p>
- Boost 1.53
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_CHAR16_T</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR16_T</span></code>
- (negated)
- </p>
- </td>
- <td>
- <p>
- Boost 1.53
- </p>
- </td>
- <td>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_CHAR32_T</span></code>
- </p>
- </td>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR32_T</span></code>
- (negated)
- </p>
- </td>
- <td>
- <p>
- Boost 1.53
- </p>
- </td>
- <td>
- </td>
- </tr>
- </tbody>
- </table></div>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h3 class="title">
- <a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code" title="Macros for libraries with separate source code">Macros
- for libraries with separate source code</a>
- </h3></div></div></div>
- <div class="toc"><dl class="toc">
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.macros_controlling_shared_library_symbol_visibility">Macros
- controlling shared library symbol visibility</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.abi_fixing">ABI
- Fixing</a></span></dt>
- <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.automatic_library_selection">Automatic
- library selection</a></span></dt>
- </dl></div>
- <p>
- The following macros and helper headers are of use to authors whose libraries
- include separate source code, and are intended to address several issues:
- </p>
- <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
- <li class="listitem">
- Controlling shared library symbol visibility
- </li>
- <li class="listitem">
- Fixing the ABI of the compiled library
- </li>
- <li class="listitem">
- Selecting which compiled library to link against based upon the compilers
- settings
- </li>
- </ul></div>
- <p>
- See <a href="http://www.boost.org/development/separate_compilation.html" target="_top">Guidelines
- for Authors of Boost Libraries Containing Separate Source</a>
- </p>
- <div class="section">
- <div class="titlepage"><div><div><h4 class="title">
- <a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.macros_controlling_shared_library_symbol_visibility"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.macros_controlling_shared_library_symbol_visibility" title="Macros controlling shared library symbol visibility">Macros
- controlling shared library symbol visibility</a>
- </h4></div></div></div>
- <p>
- Some compilers support C++ extensions that control which symbols will be
- exported from shared libraries such as dynamic shared objects (DSO's) on
- Unix-like systems or dynamic-link libraries (DLL's) on Windows.
- </p>
- <p>
- The Microsoft VC++ compiler has long supplied <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllexport</span><span class="special">)</span></code> and <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllimport</span><span class="special">)</span></code> extensions for this purpose, as do virtually
- all other compilers targeting the Windows platform.
- </p>
- <p>
- Modern versions of the GNU GCC compiler provide the <code class="computeroutput"><span class="identifier">__attribute__</span><span class="special">((</span><span class="identifier">visibility</span><span class="special">(</span><span class="string">"default"</span><span class="special">)))</span></code> extension to indicate that a symbol
- should be exported. All other symbols may be hidden by using the <code class="computeroutput"><span class="special">-</span><span class="identifier">fvisibility</span><span class="special">-</span><span class="identifier">hidden</span></code>
- or <code class="computeroutput"><span class="special">-</span><span class="identifier">fvisibility</span><span class="special">-</span><span class="identifier">ms</span><span class="special">-</span><span class="identifier">compat</span></code> compiler switches.
- </p>
- <p>
- Boost supplies several macros to make it easier to manage symbol visibility
- in a way that is portable between compilers and operating systems.
- </p>
- <div class="informaltable"><table class="table">
- <colgroup>
- <col>
- <col>
- </colgroup>
- <thead><tr>
- <th>
- <p>
- Macro
- </p>
- </th>
- <th>
- <p>
- Description
- </p>
- </th>
- </tr></thead>
- <tbody>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_SYMBOL_EXPORT</span></code>
- </p>
- </td>
- <td>
- <p>
- Defines the syntax of a C++ language extension that indicates
- a symbol is to be exported from a shared library. If the compiler
- has no such extension, the macro is defined with no replacement
- text.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_SYMBOL_IMPORT</span></code>
- </p>
- </td>
- <td>
- <p>
- Defines the syntax of a C++ language extension that indicates
- a symbol is to be imported from a shared library. If the compiler
- has no such extension, the macro is defined with no replacement
- text.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_SYMBOL_VISIBLE</span></code>
- </p>
- </td>
- <td>
- <p>
- Defines the syntax of a C++ language extension that indicates
- a symbol is to be globally visible. If the compiler has no such
- extension, the macro is defined with no replacement text. Needed
- for classes that are not otherwise exported, but are used by
- RTTI. Examples include class for objects that will be thrown
- as exceptions or used in dynamic_casts, across shared library
- boundaries. For example, a header-only exception class might
- look like this:
- </p>
- <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">class</span> <span class="identifier">BOOST_SYMBOL_VISIBLE</span> <span class="identifier">my_exception</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span> <span class="special">{</span> <span class="special">...</span> <span class="special">};</span>
- </pre>
- <p>
- Without BOOST_SYMBOL_VISIBLE, it would be impossible to catch
- my_exception thrown from a shared library compiled by GCC with
- the -fvisibility=hidden option.
- </p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <code class="computeroutput"><span class="identifier">BOOST_HAS_DECLSPEC</span></code>
- </p>
- </td>
- <td>
- <p>
- The compiler has C++ extensions <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllexport</span><span class="special">)</span></code> and <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllimport</span><span class="special">)</span></code> to control export/import of
- symbols from shared libraries. <span class="emphasis"><em>Deprecated. This macro
- is no longer necessary since BOOST_SYMBOL_EXPORT and BOOST_SYMBOL_IMPORT
- are now supplied. It is provided to support legacy code.</em></span>
- </p>
- </td>
- </tr>
- </tbody>
- </table></div>
- <p>
- Typical usage:
- </p>
- <p>
- <span class="bold"><strong>boost/foo/config.hpp</strong></span>
- </p>
- <pre class="programlisting"><span class="special">...</span>
- <span class="preprocessor">#if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_ALL_DYN_LINK</span><span class="special">)</span> <span class="special">||</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_FOO_DYN_LINK</span><span class="special">)</span>
- <span class="preprocessor"># if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_FOO_SOURCE</span><span class="special">)</span>
- <span class="preprocessor"># define</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">BOOST_SYMBOL_EXPORT</span>
- <span class="preprocessor"># else</span>
- <span class="preprocessor"># define</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">BOOST_SYMBOL_IMPORT</span>
- <span class="preprocessor"># endif</span>
- <span class="preprocessor">#else</span>
- <span class="preprocessor"># define</span> <span class="identifier">BOOST_FOO_DECL</span>
- <span class="preprocessor">#endif</span>
- <span class="special">...</span>
- </pre>
- <p>
- <span class="bold"><strong>boost/foo/foo.hpp</strong></span>
- </p>
- <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">foo</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
- <span class="special">...</span>
- <span class="keyword">class</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">bar</span> <span class="special">{</span> <span class="special">...</span> <span class="special">};</span>
- <span class="special">...</span>
- <span class="keyword">void</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">f</span><span class="special">();</span>
- <span class="special">...</span>
- </pre>
- <p>
- <span class="bold"><strong>boost/libs/foo/src/foo.cpp</strong></span>
- </p>
- <pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_FOO_SOURCE</span>
- <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">foo</span><span class="special">/</span><span class="identifier">foo</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
- <span class="special">...</span>
- <span class="keyword">void</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">f</span><span class="special">()</span>
- <span class="special">{</span>
- <span class="special">...</span>
- <span class="special">}</span>
- <span class="special">...</span>
- </pre>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h4 class="title">
- <a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.abi_fixing"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.abi_fixing" title="ABI Fixing">ABI
- Fixing</a>
- </h4></div></div></div>
- <p>
- When linking against a pre-compiled library it vital that the ABI used
- by the compiler when building the library <span class="emphasis"><em>matches exactly</em></span>
- the ABI used by the code using the library. In this case ABI means things
- like the struct packing arrangement used, the name mangling scheme used,
- or the size of some types (enum types for example). This is separate from
- things like threading support, or runtime library variations, which have
- to be dealt with by build variants. To put this in perspective there is
- one compiler (Borland's) that has so many compiler options that make subtle
- changes to the ABI, that at least in theory there 3200 combinations, and
- that's without considering runtime library variations. Fortunately these
- variations can be managed by <code class="computeroutput"><span class="preprocessor">#pragma</span></code>'s
- that tell the compiler what ABI to use for the types declared in your library.
- In order to avoid sprinkling <code class="computeroutput"><span class="preprocessor">#pragma</span></code>'s
- all over the boost headers, there are some prefix and suffix headers that
- do the job. Typical usage is:
- </p>
- <p>
- <span class="bold"><strong>my_library.hpp</strong></span>
- </p>
- <pre class="programlisting"><span class="preprocessor">#ifndef</span> <span class="identifier">MY_INCLUDE_GUARD</span>
- <span class="preprocessor">#define</span> <span class="identifier">MY_INCLUDE_GUARD</span>
- <span class="comment">// all includes go here:</span>
- <code class="literal"><span class="bold"><strong>#include <boost/config.hpp></strong></span></code>
- <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">whatever</span><span class="special">></span>
- <code class="literal"><span class="bold"><strong>#include <boost/config/abi_prefix.hpp></strong></span></code> <span class="comment">// must be the last #include</span>
- <span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
- <span class="comment">// your code goes here</span>
- <span class="special">}</span>
- <code class="literal"><span class="bold"><strong>#include <boost/config/abi_suffix.hpp></strong></span></code> <span class="comment">// pops abi_prefix.hpp pragmas</span>
- <span class="preprocessor">#endif</span> <span class="comment">// include guard</span>
- </pre>
- <p>
- <span class="bold"><strong>my_library.cpp</strong></span>
- </p>
- <pre class="programlisting"><span class="special">...</span>
- <span class="comment">// nothing special need be done in the implementation file</span>
- <span class="special">...</span>
- </pre>
- <p>
- The user can disable this mechanism by defining <code class="computeroutput"><span class="identifier">BOOST_DISABLE_ABI_HEADERS</span></code>,
- or they can define <code class="computeroutput"><span class="identifier">BOOST_ABI_PREFIX</span></code>
- and/or <code class="computeroutput"><span class="identifier">BOOST_ABI_SUFFIX</span></code>
- to point to their own prefix/suffix headers if they so wish.
- </p>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h4 class="title">
- <a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.automatic_library_selection"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.automatic_library_selection" title="Automatic library selection">Automatic
- library selection</a>
- </h4></div></div></div>
- <p>
- It is essential that users link to a build of a library which was built
- against the same runtime library that their application will be built against
- -if this does not happen then the library will not be binary compatible
- with their own code- and there is a high likelihood that their application
- will experience runtime crashes. These kinds of problems can be extremely
- time consuming and difficult to debug, and often lead to frustrated users
- and authors alike (simply selecting the right library to link against is
- not as easy as it seems when their are 6-8 of them to chose from, and some
- users seem to be blissfully unaware that there even are different runtimes
- available to them).
- </p>
- <p>
- To solve this issue, some compilers allow source code to contain <code class="computeroutput"><span class="preprocessor">#pragma</span></code>'s that instruct the linker
- which library to link against, all the user need do is include the headers
- they need, place the compiled libraries in their library search path, and
- the compiler and linker do the rest. Boost.config supports this via the
- header <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">auto_link</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>, before including this header one or
- more of the following macros need to be defined:
- </p>
- <div class="variablelist">
- <p class="title"><b></b></p>
- <dl class="variablelist">
- <dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_LIB_NAME</span></code></span></dt>
- <dd><p>
- Required: An identifier containing the basename of the library, for
- example 'boost_regex'.
- </p></dd>
- <dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_DYN_LINK</span></code></span></dt>
- <dd><p>
- Optional: when set link to dll rather than static library.
- </p></dd>
- <dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_LIB_DIAGNOSTIC</span></code></span></dt>
- <dd><p>
- Optional: when set the header will print out the name of the library
- selected (useful for debugging).
- </p></dd>
- <dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_AUTO_LINK_NOMANGLE</span></code></span></dt>
- <dd><p>
- Optional: whan set specifies that we should link to BOOST_LIB_NAME.lib,
- rather than a mangled-name version.
- </p></dd>
- <dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_AUTO_LINK_TAGGED</span></code></span></dt>
- <dd><p>
- Optional: Specifies that we link to libraries built with the --layout=tagged
- option. This is essentially the same as the default name-mangled
- version, but without the compiler name and version, or the Boost
- version. Just the build options.
- </p></dd>
- <dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_AUTO_LINK_SYSTEM</span></code></span></dt>
- <dd><p>
- Optional: Specifies that we link to libraries built with the --layout=system
- option. This is essentially the same as the non-name-mangled version,
- but with the prefix to differentiate static and dll builds
- </p></dd>
- </dl>
- </div>
- <p>
- If the compiler supports this mechanism, then it will be told to link against
- the appropriately named library, the actual algorithm used to mangle the
- name of the library is documented inside <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">auto_link</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
- and has to match that used to create the libraries via bjam 's install
- rules.
- </p>
- <p>
- <span class="bold"><strong>my_library.hpp</strong></span>
- </p>
- <pre class="programlisting"><span class="special">...</span>
- <span class="comment">//</span>
- <span class="comment">// Don't include auto-linking code if the user has disabled it by</span>
- <span class="comment">// defining BOOST_ALL_NO_LIB, or BOOST_MY_LIBRARY_NO_LIB, or if this </span>
- <span class="comment">// is one of our own source files (signified by BOOST_MY_LIBRARY_SOURCE):</span>
- <span class="comment">//</span>
- <span class="preprocessor">#if</span> <span class="special">!</span><span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_ALL_NO_LIB</span><span class="special">)</span> <span class="special">&&</span> <span class="special">!</span><span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_MY_LIBRARY_NO_LIB</span><span class="special">)</span> <span class="special">&&</span> <span class="special">!</span><span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_MY_LIBRARY_SOURCE</span><span class="special">)</span>
- <span class="preprocessor"># define</span> <span class="identifier">BOOST_LIB_NAME</span> <span class="identifier">boost_my_library</span>
- <span class="preprocessor"># ifdef</span> <span class="identifier">BOOST_MY_LIBRARY_DYN_LINK</span>
- <span class="preprocessor"># define</span> <span class="identifier">BOOST_DYN_LINK</span>
- <span class="preprocessor"># endif</span>
- <span class="preprocessor"># include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">auto_link</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
- <span class="preprocessor">#endif</span>
- <span class="special">...</span>
- </pre>
- <p>
- <span class="bold"><strong>my_library.cpp</strong></span>
- </p>
- <pre class="programlisting"><span class="comment">// define BOOST_MY_LIBRARY_SOURCE so that the header knows that the</span>
- <span class="comment">// library is being built (possibly exporting rather than importing code)</span>
- <span class="comment">//</span>
- <span class="preprocessor">#define</span> <span class="identifier">BOOST_MY_LIBRARY_SOURCE</span>
- <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">my_library</span><span class="special">/</span><span class="identifier">my_library</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
- <span class="special">...</span>
- </pre>
- </div>
- </div>
- </div>
- <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
- <td align="left"></td>
- <td align="right"><div class="copyright-footer">Copyright © 2001-2007 Beman Dawes, Vesa Karvonen, John
- Maddock<p>
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
- </p>
- </div></td>
- </tr></table>
- <hr>
- <div class="spirit-nav">
- <a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="build_config.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
- </div>
- </body>
- </html>
|