C++11

Reference #1401.

Change much stuff to use new library.
This line's crazy long and complicated. Split it and make it more readable.