tested:
* gcc 4.7.3
* gcc 4.8.1
* clang 3.3