Question

I'm using MS VC 2008 and for some projects Intel C++ compiler 11.0. Is it worth using tr1 features in production? Will they stay in new standard?

For example, now I use stdext::hash_map. TR1 defines std::tr1::unordered_map. But in MS implementation unordered_map is just theirs stdext::hash_map, templatized in another way.

Was it helpful?

Solution

My advice would be to use an alias for the namespace containing the TR1 items you use. This way, you'll be able to "move" from using the TR1 version to the standard version when your compiler supports it.

namespace cpp0x = std::tr1;

cpp0x::unordered_map<std::string, int> mymap;

for a C++0x compiler, the first line becomes:

namespace cpp0x = std;

and you can leave the rest alone.

OTHER TIPS

Yes, everything that's in tr1 will stay there. Some things will be accepted in std::, but they will stay in tr1 also. So none of your code will break once the new standard is finished.

Forgive me: no, they will not. As described here:

Two notes have been added to the proposal to make it clear to users that in the transition from the TR to future standards, the TR components will not remain in namespace std::tr1 and the configuration macros will disappear.

But it's worth noting that compiler vendors willing to support tr1 now, will most probably not pull the earth from under your feet, and provide you with some sort of transition method.

unordered_map will be in the new standard, hash_map won't be. Note that the tr1 namespace is not standard either.

The vast majority of library code that will be added in C++0x has been around for quite a while in the Boost C++ Libraries. I would strongly recommend using Boost (i.e. boost::unordered_map), since it works on a very large number of ISO C++ 1998 compilers, and will continue to work (probably using the compiler's builtin implementation) on C++0x compilers. In addition, you won't need to change the namespace -- whereas items in std::tr1 that are approved will be moved into std -- since it will always be available in boost::, and you won't have to worry about which elements of tr1 have made it into the standard. In short, Boost is the way to go.

For the tr1::unordered_map be aware that there are many various implementations of Hash Maps possible and that the implementation elected by the standard is quite classic... but may not be the most performing for your particular task.

Unfortunately the standard did not require that multiple strategies be implemented (though I suppose it would have required quite a lot of work).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top