Fix: provide a cast operator to unisgned char to fix libc++ compile issue
fix: Eigen doesn't compile in clang without increasing template depth