STL 쓸때 이동생성자, 이동할당자에 noexcept만 붙이면 어지간하면 이동될 줄 알았는데

컨테이너를 생성할 때 브레이스로 초기화를 하면 결국 복사 과정이 끼어들어가네요


Case B, Case C에서 벡터를 브레이스 초기화하므로 initializer_list가 생성되어야 하는데 여기에서 Foo 객체들의 복사를 피할 수가 없네요

initializer_list가 생성된 이후에 이동 생성자가 불리지 않는 이유는 copy elison 때문인 것 같고요


물론 위 예제처럼 Foo 객체가 벡터 밖에서 쓰일 일이 없다면 처음부터

v.emplace_back(0)

이런 식으로 바로 벡터 안에서 생성하는게 explicit constructor 하나만 호출될테니 가장 효율적이겠지만 실험을 위해 배제했어요