#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";
}
I2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IHN0ZDo6aXNfY29udmVydGlibGU8IFUmJiwgVCA+Ojp2YWx1ZSA+Ojp0eXBlIC8vIG5vdCBxdWl0ZSBwZXJmZWN0CiAgICBhc3NpZ24oIFQqIGRlc3QsIFUmJiBzcmMgKSB7CiAgICAgICpkZXN0ID0gc3RkOjpmb3J3YXJkPFU+KHNyYyk7CiAgICB9CgojaW5jbHVkZSA8aW9zdHJlYW0+CgppbnQgbWFpbigpIHsKICAgIGRvdWJsZSBkOwogICAgYXNzaWduKCAmZCwgMiApOwogICAgc3RkOjpjb3V0IDw8IGQgPDwgIlxuIjsKfQ==