1. setenv with empty string is consistent with MS CRT method of deletion of variables. And doesn't contradict with POSIX.
2. making 'overwrite' optional is simple convenient in C++, and in most cases overwrite is set to '1'.
3. putenv use std::string, so it just clarification
4. it's MS-style
5. by POSIX environment can be changed using returned pointer. As std::string used, it's just clarification.

Actually, all point are more extending, rather than exceptions.
If it looks too complex, this notice can be removed, as functions can be used in POSIX-style.