replace ValueProperty constructor duplicate code with perfect forwarding