libMesh/libmesh — pull request #335 by jwpeterson (2014-08-27 18:46:41+00:00)
Title: Update libMesh's AutoPtr class to a modern unique_ptr implementation

(This does *not* need to be merged before 1.0 is tagged, and will definitely fail the MOOSE tests until idaholab/moose#3799 is merged.)

This branch replaces libmesh's `AutoPtr` implementation (which is based on the deprecated `std::auto_ptr` class) with one of:

1.) `std::unique_ptr`
2.) Howard Hinnant's C++03 compatible `boost::unique_ptr`
3.) The original `libMesh::AutoPtr`, now called `DeprecatedAutoPtr`

in that order, depending on the capabilities of the compiler. The benefits of doing this are that we stop using a deprecated class, it provides a smooth transition to C++11 compatible compilers, and (although we don't do it in library code) client code can place libMesh `AutoPtr`s safely into `std::move()`-aware containers.

I have tested this fairly extensively on Clang 3.3 and GCC-4.6, and somewhat on Intel-12 (though our license server is down at the moment) and it seems to work.

There may be some minor changes required in client code since `unique_ptr` explicitly disallows copy construction and cannot be created with an explicit NULL argument (see 3541e89c315943655d96797f4b6213619212e040 for additional details). I'd be happy to assist anyone who tries out this branch and has issues compiling their applications...