+ use more consise c++11 syntax
+ add move ctor and 'canonical' assignment operator