예. STL 컨테이너의 값은 복사 의미 체계를 유지해야합니다. IOW, 그들은 기본 유형 (예 : int)처럼 행동해야합니다. 즉, 무엇보다도 기본 구성이 가능해야합니다.
이 (및 기타 요구 사항) 없이는 STL 컨테이너가 구현되는 데이터 구조에서 다양한 내부 복사 / 이동 / 스왑 / 비교 작업을 구현하는 것이 불필요하게 어려울 것입니다.
C ++ 표준을 참조하면 내 대답이 정확하지 않다는 것을 알 수 있습니다. 기본 구성은 실제로 요구 사항이 아닙니다 .
20.1.4.1부터 :
기본 생성자는 필요하지 않습니다. 특정 컨테이너 클래스 멤버 함수 서명은 기본 생성자를 기본 인수로 지정합니다. T ()는 잘 정의 된 표현식이어야합니다 ...
따라서 엄밀히 말해서 값 유형은 서명에서 기본 생성자를 사용하는 컨테이너의 함수를 사용하는 경우에만 기본 구성 가능해야합니다.
STL 컨테이너에 저장된 모든 값의 실제 요구 사항 (23.1.3)은 CopyConstructible및 Assignable.
특정 컨테이너에 대한 기타 특정 요구 사항도 있습니다 Comparable(예 : 맵의 키).
덧붙여서, 다음은 comeau에서 오류없이 컴파일됩니다 .
#include <map>
class MyClass
{
public:
MyClass(int t);
};
int main()
{
std::map<int, MyClass> myMap;
}
따라서 이것은 g ++ 문제 일 수 있습니다.