Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <type_traits>
- template <typename F, typename T>
- requires
- std::is_pointer_v<F> &&
- std::is_convertible_v<
- std::remove_pointer_t<F>,
- T
- >
- void my_move(F from, T& to)
- {
- std::cout << "my_move(" << *from << " -> " << to << ") v1" << std::endl;
- to = *from;
- }
- template <typename F, typename T>
- requires
- !std::is_pointer_v<F> &&
- std::is_convertible_v<F, T>
- void my_move(F from, T& to) {
- std::cout << "my_move(" << from << " -> " << to << ") v2" << std::endl;
- to = from;
- }
- int main() {
- int x = 42;
- short y = 100;
- my_move(&x, y);
- std::cout << "y = " << y << std::endl;
- x = 46;
- my_move(x, y);
- std::cout << "y = " << y << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement