use C++14 to write type traits