MSVC, Clang 및 GCC는이 코드에 동의하지 않습니다.
struct Base { int x; };
struct Der1 : public Base {};
struct Der2 : public Base {};
struct AllDer : public Der1, public Der2 {
void foo() {
Der1::Base::x = 5;
}
};
GCC :
<source>: In member function 'void AllDer::foo()':
<source>:10:21: error: 'Base' is an ambiguous base of 'AllDer'
10 | Der1::Base::x = 5;
| ^
Compiler returned: 1
Clang은 비슷한 오류를 제공하고 MSVC는 오류를 제공하지 않습니다.
여기 누구세요?
나는 이것이 [class.member.lookup]에 포함되어 있다고 생각 하지만,이 사건에 대해 무엇을 말하려고하는지 이해하는 데 어려움이 있습니다. 관련 부분을 인용하고 가능한 경우 일반 영어로 설명하십시오.
추신 :이 질문에서 영감을 얻은 이유 :: :: 연산자 trough 파생 클래스에서 기본 클래스에 대한 참조가 모호한 이유는 무엇입니까?
PPS : 실제로 내 의심은 Der1::Base
유형을 나타내는 지, Base
그리고 Der2::Base
정확히 동일한 유형인지 또는 하위 객체를 나타내는 지 여부입니다. 나는 그것이 첫 번째라고 확신하지만, 후자라면 MSVC가 옳을 것입니다.
::Base
하지만 실제 질문은 여기에서 약간 다르게 보입니다. 유형의 하위 오브젝트는 두 가지 Base
이며 둘 다 Base::x
멤버를 갖습니다 .