
From: Dean Michael Berris
As for background, I'm trying to achieve what Boost.Bind does with: boost::bind(&function, _1, _2) -- where _1 and _2 are used mainly as placeholders -- without having to resort to unnamed namespaces (namespace { ... }) to avoid ODR violation. I'm looking at doing something (for the network library I'm working on):
network::message m; m << transform(to_upper_, headers_);
In the above, to_upper_ and headers_ are placeholders which are used mainly for type deduction -- while transform returns an instance of a type (a functor) with template parameters dependent on the types of to_upper_ and headers_.
I've been successful with using extern placeholders in GCC, and during link time I don't encounter the errors which I encounter with MSVC. I now need to find a way of doing this another way.
I assume current declarations like: extern to_upper_t to_upper_; extern headers_t headers_; template<T1,T2> transform(T1 t1, T2 t2); - The simple one is: m << transform<to_upper_t,headers_t>(); - You could add a CPP where you define all the externals. There must be other options. -- Martin Bonner Project Leader PI SHURLOK LTD Telephone: +44 1223 441434 / 203894 (direct) Fax: +44 1223 203999 Email: martin.bonner@pi-shurlok.com www.pi-shurlok.com disclaimer