2013-04-12 4 views
1

나는 foo라는 함수를 가진 인터페이스의 사용을 테스트하고있다. 그때 foo를 호출 한 경우 확인하는 시험이const_iterator를 사용할 때 어설 션

class Mock 
{ 
public: 
    void foo(Foo::const_iterator begin, Foo::const_iterator end) { 
     _begin = begin; 
     _end = end; 

     ... 
    } 
    ... 
    Foo::const_iterator _begin; 
    Foo::const_iterator _end; 
}; 

: 여기 내 모의에서이 기능의 내 구현

// test that function foo is not called 
EXPECT_EQ(mock->_begin, Foo::const_iterator()); 

는하지만이 주장 비주얼 스튜디오 나에게 주장을주고있다 이터레이터는 호환되지 않습니다. 나는 foo()를 호출하지 않으면 _begin이 Foo :: const_iterator()와 같을 것이라고 기대했을 것이다. 왜 안 그래?

+0

'Foo :: const_iterator()'의'operator =='는 두 개의 기본 생성 인스턴스를 서로 비교할 수 있습니까? 기본 생성 iterator를 "invalid"로 만들고 "iterator와는 다르다"는 의미의 유효한 선택이됩니다. – Angew

+0

@stardust_ 멤버를 유형과 어떻게 비교 하시겠습니까? – Angew

답변

0

아마도 VS는 기본 생성 반복자가 다른 반복자, 심지어 기본 생성자 반복자와도 호환되지 않는 방식으로 처리되는 기본 생성 반복자로 반복기 호환성 검사를 구현합니다.

1

반복자는 동일한 컨테이너를 가리키는 경우에만 비교할 수 있습니다. 기본 생성 iterator는 컨테이너를 전혀 가리 키지 않으므로 정의에 의해 어떤 것도 호환되지 않습니다.

+0

그래, 그게 전부다. 이러한 반복자는이를 설명하는 검색 용어 인 소위 "특이 값"을 가지고 있습니다. –