Depending on your PC, NVIDIA's ShadowPlay feature (new in the later versions of NVIDIA GeForce Experience) might also be an option.
I haven't tried it personally, but it might be worth looking into.
I've tried it. Haven't tested high-end games, but the ones I did test had no performance impact at all. File size depends on what's recorded though; had 4 minutes and 22 minutes of recordings, both at 1.7 GB (1080p @ 60 FPS).
This is just my personal opinion and nothing constructive.
I hate boost, therefore I think this is a terrible idea to use boost for a library you're going to distribute. One of reasons is, to compile your 10 KB program I need to download 50+ MB boost libraries; that's just silly.
I noticed some weird things with your includes:
// you are using
// but probably all compilers have unordered_map in Standard C++ Library (SCL)
// another boost include
// won't complain about this one, but kind of a tip
// Visual Studio 2013 has this include in SCL, don't know about other compilers
using namespace std::tr2::sys;
Your PIUArchiveImpl::write() method (and others) print to standard output, that's unacceptable, use callbacks if output is possible.
With while() loop compiler probably put variable into register, so value in memory will never be updated until function is exited or significant part of other code is executed. You can fix this by making variable volatile: