#include #include #include "JLang/JConstructor.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" namespace { struct __A__ {}; struct __B__ {}; struct __C__ { __C__(const __A__&) {} }; /** * Print class parameters. * * \param out output stream * \param uname name of class * \param vname name of class */ template inline void print(std::ostream& out, const char* uname, const char* vname) { using namespace std; using namespace JPP; out << setw(16) << left << string(string(uname) + string("(") + string(vname) + string(")")); out << setw(8) << " " << JConstructor::has_constructor; out << endl; } } /** * Print class parameters. * * \param OUT output stream * \param U class * \param V class */ #define PRINT(OUT, U, V) print(OUT, #U, #V) /** * \file * * Example program to test JLANG::JConstructor class. * \author mdejong */ int main(int argc, char **argv) { using namespace std; using namespace JPP; int debug; try { JParser<> zap("Example program to test class inspection."); zap['d'] = make_field(debug) = 3; zap(argc, argv); } catch(const exception &error) { FATAL(error.what() << endl); } if (debug >= debug_t) { cout << setw(16) << left << "name"; cout << " has constructor "; cout << endl; PRINT(cout, __A__, __A__); PRINT(cout, __C__, __A__); PRINT(cout, __C__, __B__); } ASSERT(( JConstructor<__A__, __A__>::has_constructor)); ASSERT(( JConstructor<__C__, __A__>::has_constructor)); ASSERT((!JConstructor<__C__, __B__>::has_constructor)); }