proper use of declval