Hi all,
While working on smart_assert, I created a class that should ensure calling
a global function before main (a static_initializer).
It does not work for either VC6 nor for gcc3.2.
Do you have any idea of a workaround?
Here's the code:
#include <iostream>
template< class return_type, return_type (*f)()>
class initializer {
public:
struct internal {
internal() {
f();
}
};
static internal s_internal;
};
template< class return_type, return_type (*f)()>
initializer< return_type, f>::internal initializer< return_type,
f>::s_internal;
// workaround for VC6 (VC6 does not handle void in generic programming very
well...)
template< void (*f)()>
class void_initializer {
public:
struct internal {
internal(int) {
f();
}
};
static internal s_internal;
};
template< void (*f)()>
void_initializer< f>::internal void_initializer< f>::s_internal = 0;
void f() {
std::cout << "f()" << std::endl;
}
int main() {
// does NOT call f() !!!
void_initializer< &f> v;
std::cin.get();
return 0;
}
Thanks.
Best,
John
--
John Torjo
-- "Practical C++" column writer for builder.com.com
Freelancer, C++ consultant
mailto:[EMAIL PROTECTED]
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost