Use declval to avoid instantiating type