About the use of compiler macros that you and Scott suggested, I originally refrained from using them because I wanted the user to choose explicitely between the run-time and compile-time version, and also because the standard does not mandate the use of compiler macros even when they are defined.
But now that I've given it more thought, I may actually change my mind...
1/ Amongst the the current major implementations, are there any that would *not* use my compiler macro ?
2/ Assuming that the answer to 1/ is "no", something that I hadn't realized before is that I could provide the user with a compile-time option specifying whether to use the compiler macro version. The macro could then test this option and simly decline to expand by returning the original form.
This might actually be the best way to go...