#include <utility>
#include <type_traits>

    template<typename T, typename U>
    typename std::enable_if< std::is_convertible< U&&, T >::value >::type // not quite perfect
    assign( T* dest, U&& src ) {
      *dest = std::forward<U>(src);
    }

#include <iostream>

int main() {
    double d;
    assign( &d, 2 );
    std::cout << d << "\n";
}