후속 질문 this one.컴파일러가 템플릿 인수 목록에서 기본 클래스 생성자를 선택하는 이유는 무엇입니까?
기본적으로, 다음 코드에서 왜 컴파일러는 C
생성자에서 A<B>
내부의 B
가 B
기본 클래스의 (액세스) 생성자를 참조하는 것이 생각합니까?
struct B{};
template <typename T>
struct A : private T{};
struct C : public A<B>{
C(A<B>); // ERROR HERE
};
Live example on Ideone. 출력 : 당신이 A<B*>
, A<B&>
또는 A<const B>
에 생성자 인수를 변경하면 같은 오류가 팝업 것을
prog.cpp:1:9: error: 'struct B B::B' is inaccessible
prog.cpp:7:7: error: within this context
참고. 또한 MSVC10, GCC 4.7 및 Clang 3.1 ToT 중 세 개는 오류가 발생하므로 C++ 사양의 무언가 여야합니다. 무엇입니까?
정확히 같은 주제를 만든 이유를 모르겠습니다. 당신은 더 나은 것을 만들기 위해 그 주제를 편집 할 수있었습니다. – Nawaz
@Nawaz : 근본적으로 다른 질문입니다. 나는 "왜"를 묻는다, 다른 질문은 "무엇을해야하는지"묻는다. – Xeo
남자, 나는 이것을 클래스 A : private NotCopyable (클래스 B : private NotCopyable {}};)로 두 번 이상 물 렸습니다. 글로벌 범위를보기 전에 클래스 범위에서 심볼을 찾습니다. –