이것은 또 다른 질문 의 맥락에서 나온 것입니다 .
분명히 클래스 템플릿의 멤버 함수는 ODR을 사용하는 경우에만 인스턴스화됩니다. 누군가 그게 정확히 무슨 뜻인지 설명해 주시겠습니까? ODR (One Definition Rule)에 대한 위키피디아 기사 에는 " ODR 사용 "이 언급되어 있지 않습니다 .
그러나 표준은 그것을 다음과 같이 정의합니다.
이름이 잠재적으로 평가 된 표현식으로 나타나는 변수 는 상수 표현식 (5.19)에 나타나기위한 요구 사항을 충족하는 객체가 아닌 한 odr 사용 되며 lvalue-to-rvalue 변환 (4.1)이 즉시 적용됩니다.
[basic.def.odr]에 있습니다.
편집 : 분명히 이것은 잘못된 부분이며 전체 단락에는 여러 가지에 대한 여러 정의가 포함되어 있습니다. 이것은 클래스 템플릿 멤버 함수와 관련된 것일 수 있습니다.
잠재적으로 평가 된 식에서 참조 될 때 오버로드 확인에 의해 선택된 경우 이름이 잠재적으로 평가 된 식 또는 후보 함수 집합의 멤버로 나타나는 오버로드되지 않은 함수는 순수 가상이 아닌 경우 odr 사용됩니다. 함수 및 이름이 명시 적으로 규정되지 않았습니다.
그러나이 규칙이 여러 컴파일 단위에서 어떻게 작동하는지 이해하지 못합니다. 클래스 템플릿을 명시 적으로 인스턴스화하면 모든 멤버 함수가 인스턴스화됩니까?