
"Andy Little" wrote
Unfortunately I have now come upon an intractable problem. In debug mode on small examples I am getting
" fatal error C1067: compiler limit : debug information module size exceeded". (compiles ok in release mode)
Hi Cromwell, I am concerned that "rational.hpp" depends on mpl::big_integral and mpl::double as well as some of their operations, which are huge anounts of header material It is simple to solve this by removing the numeric_casts for big_integral and double, from rational.hpp. I am sure they can be put in the numeric stuff for these types. then deleting <boost/mpl/math/double_/aux_/to_simplified_rational.hpp> <boost/mpl/math/double_tag.hpp> <boost/mpl/math/unsigned_big_integral_tag.hpp> <boost/mpl/math/big_integral_tag.hpp> <boost/mpl/math/double_tag.hpp> #includes that removes a large number of IMO unnecessary dependencies. --------------- As far as my other problems are concerned it appears that the gcd header is the culprit in producing a template too long for VC7.1 to hold in its debug database. I seem to remember that using a recursive algorithm that the maximum number of recursions for a 32 bit int is around 45. However your version of gcd actually uses more typedefs than this AFAICS, so I am pretty sure that it is Less efficient even in worst case which is rare anyway, while in usual case it is definitely less efficient for 32 bit integes anyway. (I think even 64 bit ints will converge reasonably fast). It might be worth trying a comparison .... Anyway changing the gcd algorithm to a recursive one wrapping boost::math::static_gcd (attached) in "boost/math/commn_factor.hpp" cures the above problem of compiler running out of keys and similar issues for me. --------------- As previously mentioned I also reckon that it would be best to make typeof registration separate. regards Andy Little begin 666 gcd.hpp M+R\@0V]P>7)I9VAT("A#*2 R,# U+3(P,#8@0W)O;7=E;&P@1"X@16YA9V4- M"B\O($1I<W1R:6)U=&5D('5N9&5R('1H92!";V]S="!3;V9T=V%R92!,:6-E M;G-E+"!697)S:6]N(#$N,"X-"B\O("A3964@86-C;VUP86YY:6YG(&9I;&4@ M3$E#14Y315\Q7S N='AT(&]R(&-O<'D@870-"B\O(&AT=' Z+R]W=W<N8F]O M<W0N;W)G+TQ)0T5.4T5?,5\P+G1X="D-"@T*(VEF;F1E9B!"3T]35%]-4$Q? M34%42%]'0T1?2%!07TE.0TQ51$5$#0HC9&5F:6YE($)/3U-47TU03%]-051( M7T=#1%](4%!?24Y#3%5$140-"B-I;F-L=61E(#QB;V]S="]M871H+V-O;6UO M;E]F86-T;W)?8W0N:'!P/@T*(VEN8VQU9&4@/&)O;W-T+VUP;"]I;G1E9W)A M;%]C+FAP<#X-"B-I;F-L=61E(#QB;V]S="]M<&PO:6YT96=R86Q?8U]T86<N M:'!P/@T*#0IN86UE<W!A8V4@8F]O<W0@>R!N86UE<W!A8V4@;7!L('L@;F%M M97-P86-E(&UA=&@@>PT*#0H@(" @=&5M<&QA=&4@/'1Y<&5N86UE($YU;65R M:6-486<Q+"!T>7!E;F%M92!.=6UE<FEC5&%G,CX-"B @("!S=')U8W0@9V-D M7VEM<&P[#0H-"B @("!T96UP;&%T92 \/@T*(" @('-T<G5C="!G8V1?:6UP M;#P@#0H@(" @(" @(&)O;W-T.CIM<&PZ.FEN=&5G<F%L7V-?=&%G+" -"B @ M(" @(" @8F]O<W0Z.FUP;#HZ:6YT96=R86Q?8U]T86<-"B @(" ^>PT*(" @ M(" @("!T96UP;&%T92 \#0H@(" @(" @(" @("!T>7!E;F%M92!.,2P@#0H@ M(" @(" @(" @("!T>7!E;F%M92!.,@T*(" @(" @(" ^#0H@(" @(" @('-T M<G5C="!A<'!L>2 Z(&)O;W-T.CIM<&PZ.FEN=&5G<F%L7V,\#0H@(" @(" @ M(" @("!U;G-I9VYE9"!L;VYG+ T*(" @(" @(" @(" @8F]O<W0Z.FUA=&@Z M.G-T871I8U]G8V0\#0H@(" @(" @(" @(" @(" @3C$Z.G9A;'5E+"!.,CHZ M=F%L=64-"B @(" @(" @(" @(#XZ.G9A;'5E#0H@(" @(" @(#Y[?3L-"B @ M("!].PT*(" @( T*(" @#0H-"B @("!T96UP;&%T92 \='EP96YA;64@3C$L M('1Y<&5N86UE($XR/@T*(" @('-T<G5C="!G8V0@.B!G8V1?:6UP;#P-"B @ M(" @(" @(" @('1Y<&5N86UE($XQ.CIT86<-"B @(" @(" @(" L('1Y<&5N M86UE($XR.CIT86<-"B @(" @(" @/CHZ=&5M<&QA=&4@87!P;'D\3C$L3C(^ M.CIT>7!E>WT[#0H-"GU]?2 @+R\@;F%M97-P86-E(&)O;W-T.CIM<&PZ.FUA M=&@-"@T*(V5N9&EF(" O+R!"3T]35%]-4$Q?34%42%]'0T1?2%!07TE.0TQ5 %1$5$#0H` ` end