use std::forward<T> for perfect forwarding (via @DennisOSRM)