made Variant::create use perfect forwarding to preserve r-value references and move semantics