Greetings,
 
I was wondering if the following can be done with Boost Preprocessor.  Given a list of preprocessor macro names, write a simple program that prints whether each macro is defined and its value if it is defined.
 
In particular, I'd like to know if the following example program could be reduced/simplified with Boost:
 
#include <iostream>
using namespace std;
 
#define STRING(x) #x
#define STRINGIZE(x) STRING(x)
 
#define IS " is "
#define NOT "not "
#define DEFINED "defined."
#define VALUE "  Its value is "
 
extern int
main () {
#if defined __mips
    cout << STRING(__mips) IS DEFINED;
    cout << VALUE STRINGIZE(__mips) << endl;
#else
    cout << STRING(__mips) IS NOT DEFINED << endl;
#endif
 
#if defined __unix
    cout << STRING(__unix) IS DEFINED;
    cout << VALUE STRINGIZE(__unix) << endl;
#else
    cout << STRING(__unix) IS NOT DEFINED << endl;
#endif
 
#if defined __sgi
    cout << STRING(__sgi) IS DEFINED;
    cout << VALUE STRINGIZE(__sgi) << endl;
#else
    cout << STRING(__sgi) IS NOT DEFINED << endl;
#endif
 
#if defined _COMPILER_VERSION
    cout << STRING(_COMPILER_VERSION) IS DEFINED;
    cout << VALUE STRINGIZE(_COMPILER_VERSION) << endl;
#else
    cout << STRING(_COMPILER_VERSION) IS NOT DEFINED << endl;
#endif
 
#if defined __GNUC__
    cout << STRING(__GNUC__) IS DEFINED;
    cout << VALUE STRINGIZE(__GNUC__) << endl;
#else
    cout << STRING(__GNUC__) IS NOT DEFINED << endl;
#endif
    return 0;
}
 
Thanks,
Eric.