class contract implementation working (with c++11 sfinae!)