Wth a Boost::log example I have tried to preprocess everything and throw creduce at it with little success after five of reducing. It did go from 300K lines to 10K lines but the process slows down and that's still nowhere near a reduced example a human can understand.
There are three reasons for this.
First, every interestingness test was slow to compile, about 10s.
Second, Boost-using code and Boost-headers usually include many more includes than actually required for a specific example. We are talking about very large preprocessed files. Preprocessing the Boost::log example sinks_async.cpp results in 8.7MB file on my system. Once preprocessed they are not quickly reduced and it's much more efficient to reduce one #include line rather than reducing the resulting huge preprocessed code - which may not be needed at all.
Finally, the Boost usage of templates, inheritance and macros (with non-preprocessed code) is very (too?) complex to automatically reduce and required manual help anyhow. Helping the reduce process is feasible only while the source is still human-readable and small.
With the Boost::log example I used creduce mostly for deleting the includes, most of them were *not* required at every include depth, then manually copying the remaining include files text into the main include, in part or in whole (judgement call). It took about a day work to reduce this example.
With regard to included files, when the nesting of includes is very deep (as in Boost) it's very efficient to to replace the included with the include-included files only, no other text, see if this passes the interestingness test, reduce the new includes and repeat. This process cuts you through the first six layers of includes or so with Boost, getting quickly to the "real" code. When the interestingness test fails, creduce can try to copy the whole file or it's time for manual intervention.