T, U가 모두 trivially copyable 이어도
std::pair<T,U>는 trivially copyable 이 안됨.
그래서 T, U가 memcpy 돼도 얘네의 pair는 불가능함.
웃기는건 사용자가
template <typename T, typename U> struct MyPair
{ T first; U second; };
이런 식으로 만들면 얘는 trivially copyable 됨. 사용자가 5분이면 짜는 두줄짜리 코드만도 못한 쓰레기 클래스 std::pair
저게 안되는 이유는 reference도 담을 수 있게 하려다가 설계를 잘못해서인데
웃기는건 std::pair<T&, U&>랑 std::pair<T, U>& 이거는 또서로 호환 안됨. 되는게 뭐냐 시발
그래서 표준 라이브러리 제작하는 애들도 내부적으로는 pair 전혀 안쓰고 compressed_pair 씀 (boost에 있는거랑 비슷한거)
std::pair<T,U>는 trivially copyable 이 안됨.
그래서 T, U가 memcpy 돼도 얘네의 pair는 불가능함.
웃기는건 사용자가
template <typename T, typename U> struct MyPair
{ T first; U second; };
이런 식으로 만들면 얘는 trivially copyable 됨. 사용자가 5분이면 짜는 두줄짜리 코드만도 못한 쓰레기 클래스 std::pair
저게 안되는 이유는 reference도 담을 수 있게 하려다가 설계를 잘못해서인데
웃기는건 std::pair<T&, U&>랑 std::pair<T, U>& 이거는 또서로 호환 안됨. 되는게 뭐냐 시발
그래서 표준 라이브러리 제작하는 애들도 내부적으로는 pair 전혀 안쓰고 compressed_pair 씀 (boost에 있는거랑 비슷한거)
표준안 보니까 lvalue reference들의 tuple(pair)랑 tuple(pair)의 lvalue reference랑 implicit 형변환 지원하는건 c++23 proposal에 올라왔네. 빨리도 한다. 그렇다고 아직 채택된 것도 아님.
std::pair T&, U& 랑 std::pair T, U &랑 호환이 안 되는 건 당연하지 않냐?
그게 왜 당연해. 오른쪽에서 왼쪽으로 가는건 만들어 줘야지
N tuple도 똑같음?
이래도 안 러스트?