
"Alex Chovanec" <achovane@engin.umich.edu> wrote in message news:cganiq$q27$1@sea.gmane.org...
"Jonathan Turkanis" <technews@kangaroologic.com> wrote in message news:cgal34$l63$1@sea.gmane.org...
Currently there is detail::is_incrementable, which works well if
you
only need to distinguish between iterators and very different types. For instance, I would guess that very few if any containers are incrementable (I'd be happy to be proved wrong here), so that if you want define a function which behaves differently for container and iterators you can use is_incrementable.
In this case, I need to know whether or not type T is dereferenceable
I've attached a naively modified version of David Abraham's is_incrementable as a first attempt at is_dereferenceable. There may be all sorts of subtle issues I haven't though of.
(and more generally, whether or not it's an iterator).
I have a small template metaprogram which determines how an instance of type T should be
Why? When you write a template, you always have some idea of the range of types for which the template should be instantiated. It's rarely instantiable for all types. Given this, all you need is a way to separate iterators from the other candidate template arguments. treated. If
it's an iterator, I want to dereference it. Otherwise, I don't.
Don't forget pointers. Also these operators can also be defined as non-member functions.
Pointers are fairly easy to handle.
True.
You bring up an important point about operators defined as non-member functions. My current implementation doesn't handle this case, but I may yet be able to fix that. :-)
Try the attachment.
Thanks for the feedback,
Alex
begin 666 is_dereferenceable.hpp M+R\@3F%I=F5L>2!M;V1I9FEE9"!V97)S:6]N(&]F(&)O;W-T+V1E=&%I;"]I M<U]I;F-R96UE;G1A8FQE+FAP<"P@87,@9FER<W0@#0HO+R!A='1E;7!T(&%T M(&ES7V1E<F5F97)E;F-E86)L92P@8GD@2F]N871H86X@5'5R:V%N:7,N#0H- M"B\O($-O<'ER:6=H="!$879I9"!!8G)A:&%M<R R,# T+B!5<V4L(&UO9&EF M:6-A=&EO;B!A;F0@9&ES=')I8G5T:6]N(&ES#0HO+R!S=6)J96-T('1O('1H M92!";V]S="!3;V9T=V%R92!,:6-E;G-E+"!697)S:6]N(#$N,"X@*%-E92!A M8V-O;7!A;GEI;F<-"B\O(&9I;&4@3$E#14Y315\Q7S N='AT(&]R(&-O<'D@ M870@:'1T<#HO+W=W=RYB;V]S="YO<F<O3$E#14Y315\Q7S N='AT*0T*(VEF M;F1E9B!)4U]$15)%1D5214Y#14%"3$5?2%!07TE.0TQ51$5$#0HC(&1E9FEN M92!)4U]$15)%1D5214Y#14%"3$5?2%!07TE.0TQ51$5$#0H-"B,@:6YC;'5D M92 \8F]O<W0O='EP95]T<F%I=',O<F5M;W9E7V-V+FAP<#X-"B,@:6YC;'5D M92 \8F]O<W0O;7!L+V)O;VPN:'!P/@T*(R!I;F-L=61E(#QB;V]S="]D971A M:6PO=V]R:V%R;W5N9"YH<' ^#0H-"FYA;65S<&%C92!B;V]S="![(&YA;65S M<&%C92!D971A:6P@>R -"@T*+R\@:7-?9&5R969E<F5N8V5A8FQE/%0^(&UE M=&%F=6YC=&EO;@T*+R\-"B\O(%)E<75I<F5S.B!':79E;B!X(&]F('1Y<&4@ M5"8L(&EF('1H92!E>'!R97-S:6]N("IX(&ES('=E;&PM9F]R;65D#0HO+R!I M="!M=7-T(&AA=F4@8V]M<&QE=&4@='EP93L@;W1H97)W:7-E+"!I="!M=7-T M(&YE:71H97(@8F4@86UB:6=U;W5S#0HO+R!N;W(@=FEO;&%T92!A8V-E<W,N M#0H-"B\O(%1H:7,@;F%M97-P86-E(&5N<W5R97,@=&AA="!!1$P@9&]E<VXG M="!M97-S('1H:6YG<R!U<"X-"FYA;65S<&%C92!I<U]D97)E9F5R96YC96%B M;&5?#0I[#0H@("\O(&$@='EP92!R971U<FYE9"!F<F]M(&]P97)A=&]R*B!W M:&5N(&YO(&EN8W)E;65N="!I<R!F;W5N9"!I;B!T:&4-"B @+R\@='EP92=S M(&]W;B!N86UE<W!A8V4-"B @<W1R=6-T('1A9R![?3L-"B @#0H@("\O(&%N M>2!S;V%K<R!U<"!I;7!L:6-I="!C;VYV97)S:6]N<R!A;F0@;6%K97,@=&AE M(&9O;&QO=VEN9PT*(" O+R!O<&5R871O<BH@;&5S<RUP<F5F97)R960@=&AA M;B!A;GD@;W1H97(@<W5C:"!O<&5R871O<B!T:&%T#0H@("\O(&UI9VAT(&)E M(&9O=6YD('9I82!!1$PN#0H@('-T<G5C="!A;GD@>R!T96UP;&%T92 \8VQA M<W,@5#X@86YY*%0@8V]N<W0F*3L@?3L-"@T*(" O+R!4:&ES(&ES(&$@;&%S M="UR97-O<G0@;W!E<F%T;W(J(&9O<B!W:&5N(&YO;F4@;W1H97(@:7,@9F]U M;F0-"B @=&%G(&]P97)A=&]R*BAA;GD@8V]N<W0F*3L-"@T*(R!I9B!"3T]3 M5%]73U)+05)/54Y$*%]?35=%4DM37U\L($)/3U-47U1%4U1%1%]!5"@P>#,R M,#(I*2!<#0H@(" @?'P@0D]/4U1?5T]22T%23U5.1"A"3T]35%]-4U9#+" \ M/2 Q,S P*0T*(R @9&5F:6YE($)/3U-47V-O;6UA*&$L8BD@*&$I#0HC(&5L M<V4@#0H@("\O($EN(&-A<V4@86X@;W!E<F%T;W(J(&ES(&9O=6YD('1H870@ M<F5T=7)N<R!V;VED+"!W92=L;"!U<V4@*G@L, T*("!T86<@;W!E<F%T;W(L M*'1A9RQI;G0I.R @#0HC("!D969I;F4@0D]/4U1?8V]M;6$H82QB*2 H82QB M*0T*(R!E;F1I9B -"B @#0H@("\O('1W;R!C:&5C:R!O=F5R;&]A9',@:&5L M<"!U<R!I9&5N=&EF>2!W:&EC:"!O<&5R871O<BH@=V%S('!I8VME9 T*("!C M:&%R("@F(&-H96-K*'1A9RD@*5LR73L-"B @#0H@('1E;7!L871E(#QC;&%S M<R!4/@T*("!C:&%R(&-H96-K*%0@8V]N<W0F*3L-"B @#0H-"B @=&5M<&QA M=&4@/&-L87-S(%0^#0H@('-T<G5C="!I;7!L#0H@('L-"B @(" @('-T871I M8R!T>7!E;F%M92!R96UO=F5?8W8\5#XZ.G1Y<&4F('@[#0H-"B @(" @($)/ M3U-47U-4051)0U]#3TY35$%.5"@-"B @(" @(" @("!B;V]L#0H@(" @(" @ M("P@=F%L=64@/2!S:7IE;V8H:7-?9&5R969E<F5N8V5A8FQE7SHZ8VAE8VLH M0D]/4U1?8V]M;6$H*G@L,"DI*2 ]/2 Q#0H@(" @(" I.PT*("!].PT*?0T* M#0HC('5N9&5F($)/3U-47V-O;6UA#0H-"G1E;7!L871E(#QC;&%S<R!4/@T* M<W1R=6-T(&ES7V1E<F5F97)E;F-E86)L90T*(" Z(&UP;#HZ8F]O;%\\(#HZ M8F]O<W0Z.F1E=&%I;#HZ:7-?9&5R969E<F5N8V5A8FQE7SHZ:6UP;#Q4/CHZ M=F%L=64^#0I[#0I].PT*#0I]?2 O+R!N86UE<W!A8V4@8F]O<W0Z.F1E=&%I M; T*#0HC96YD:68@+R\@25-?1$52149%4D5.0T5!0DQ%7TA04%])3D-,541% #1 T* ` end