On Fri, Oct 8, 2010 at 12:04 PM, Z S <baltcode@gmail.com> wrote:
All the BOOST_PP functions only work on integer constants. I want to write macros, where the same interface can be used for both constants and variables, and only call the BOOST_PP if the argument is a constant, and use runtime code if it is a variable. For example,
Is there a way to do so? The C preprocessor knows whether something is a constant, so we should be able to do this somehow. Or should I suggest this as a feature request for the Boost Preprocessor library?

Thanks!


I know you don't think this is always the case, but just as people have told you on stackoverflow, your compiler will already take your expression with integer literals and replace it with the appropriate value at compile-time. You are trying to optimize something through text preprocessing that has no reason to be. Such expressions that you describe are already required by the language to be used as compile-time constant values in other contexts, such as for array sizes, integral template parameters, etc. For instance some_template< 1 + 2 - 3 * 4 / 5 >, or some_array[ 6 * 7 % 8 ] have to be valid and both cases require those values to be compile-time constants (C99 VLAs not included). Don't assume that your compiler for some reason isn't capable of doing these computations at compile-time in your particular context, especially given that such expressions are already required by the language to be computable at compile-time -- you're looking for a solution to a problem that simply does not exist.

Being pessimistic about what types of optimizations your compiler can and can't do is not a bad thing, but don't be foolish about it.

--
-Matt Calabrese