Hello, Ryan.
Thursday, November 6, 2008 at 6:26:24 AM you wrote:
RG> Sergey Sadovnikov
I understand, what 'using' is quite dangerous directive, but I use it only in implementation files and never in headers. It makes source code more shortly and readable.
RG> ...and ambiguous. In some rarely cases like this. RG> [snip] RG> If you really don't want to qualify the names each place they're used then try RG> just adding "using std::tr1::shared_ptr;" after all these locations where you RG> already do "using namespace *". If I recall correctly, the using declaration RG> will override the names from the using directives thus disambiguating it. Unfortunately it doesn't help. I think it would be good idea to avoid such ambiguous on the library level. For example, in the boost/shared_ptr.hpp make following corrections: //... #ifdef _HAS_TR1 #include <memory> namespace boost { using std::tr1::shared_ptr; //... other usings } #else // rest of the shared_ptr.hpp #endif Because of, for example, boost::shared_ptr_cast does not work with std::tr1::shared_ptr. And I think there is not necessary to have two different implementations of 'shared_ptr', 'bind', 'function' and other in case when such implementation already shipped with compiler (such as VS 2008 SP1 and gcc 4.3.x and newer). -- Best Regards, Sergey mailto:ssadovnikov@egopolis.com