
Arkadiy Vertleyb wrote:
"Tobias Schwinger" <tschwinger@neoscientists.org> wrote
There was another typo in preprocess.pl
#include <boost/mpl/vector.hpp>
should be:
#include <boost/typeof/vector.hpp>
Now it's working...
It was about time ;-).
However I ran into a problem that I think needs to be addressed somehow, namely even if LIMIT_SIZE is set to, say, 60, the vector100.hpp gets included, and vc71 fails due to max number of template parameters exeeded (although it can be worked around by defining the preprocessing mode).
It's possible that other compilers might have similar problem.
It should be possible to define a macro (or header) which would create vector specializations from m to n, and then use this macro to generate preprocessed files. Then vector.hpp would look something like this:
#if LIMIT_SIZE < 50 REGISTER_VECTOR(0, LIMIT_SIZE) #elif LIMIT_SIZE < 100 #include <boost/typeof/vector50.hpp> REGISTER_VECTOR(50, LIMIT_SIZE) #elif ...
This would become slower for intermediate numbers, since up to 50 specializations might need to be generated on the fly...
Thoughts?
Well, I just implemented this kind of "partial preprocessing". Benchmarks: LIMIT_SIZE | seconds -----------|--------- 49 & | 5 50 & | 2 149 | 36 150 * | 19 199 | 50 200 * | 23 238 # | 49 (&) only #include <boost/typeof/typeof.hpp> used for these cases (*) no preprocessing needed in these cases (#) maximum, due to MSVC8 preprocessor limits The (tested ;-) ) code: http://tinyurl.com/9qq5h Adding preprocessed files for the exact maxima of the compilers in question with the previous version could be an alternative. Of course this technique can be applied to the "partial preprocessing" version as well (in case it turns out there is a compiler which allows e.g. at most 199 template parameters, for instance). Regards, Tobias