I've used both autoconf and cmake to do functional testing of which headers are available, and then include the most recent available out of <memory>, <tr1/memory> and <boost/shared_ptr.hpp>, bringing them into a project::compat namespace to make the codebase not need to care which is in use, and the same for a number of other tr1/boost types now in C++11/14.
I'm now at the point where for some projects I've been able to strip out this entirely and just use the C++11 types directly.
I don't understand why C++03 didn't just use the std:: namespace.
http://stackoverflow.com/questions/14131454/visual-studio-20...
For the Technical Specifications, we're following their header directory and namespace rules (<experimental/meow>).
What I ended up doing is something like this:
// Ensure that _LIBCPP_VERSION is defined if necessary
#include <ciso646>
#if defined(_LIBCPP_VERSION) || __cplusplus > 199711L
// C++11 or libc++
#include <memory>
using std::shared_ptr;
#else
// C++03 or libstdc++
#include <tr1/memory>
using std::tr1::shared_ptr;
#endif