Use std::declval<T> instead of zero constant