move sfinae getter to metaprogramming