2017-09-05 10 views
0

비 자격/자격을 갖춘 이름은 다음과 같은 공제 가이드가 제공됩니다 :도에서 언급 한 바와 같이 (템플릿 공제 가이드 : 다른 표준 유형 <a href="http://en.cppreference.com/w/cpp/container/vector/deduction_guides" rel="nofollow noreferrer">cppreference:s deduction guides for <code>std::vector</code></a>에서

template< class InputIt, 
      class Alloc = std::allocator<typename std::iterator_traits<InputIt>::value_type>> 
vector(InputIt, InputIt, Alloc = Alloc()) 
    -> vector<typename std::iterator_traits<InputIt>::value_type, Alloc>; 

discussion of the page) vector17.10 (temp.deduct.guide)에서의 네임 스페이스 내가 조항 1에서 다음과 해석 예선, 3을 포함하지 않습니다

1 ... 공제 이온 가이드는 이름 조회로 찾을 수 없습니다.

3 ... 공제 가이드는 해당 클래스 템플릿과 동일한 범위에서 선언해야하며 멤버 클래스 템플릿의 경우 동일한 액세스 권한이 있어야합니다.

예를 들어. 템플리트 매개 변수화에 std::allocator, simple-template-id에 std::iterator_traits에 대해서는 엄격히 필요합니다. 위의 3에서 인용 된 부분에서 공제 안내서는 namespace std, vector으로 선언되어서는 안됩니까?

질문 (들)

  • 이 때 이러한 (공제 가이드로 동일한 범위) 적정 조회를 통해 사용할 수 있어야 위의 std::vector에 대한 공제 가이드로 규정 된 이름을 사용할 필요가 있습니까?
  • "아니오" 인 경우 수식어로 표시된 이름을 사용하는 가장 중요한 동기는 무엇입니까?
+1

cppreference의 경우? 기본 동기 부여가 작동하도록 링크를 얻는 것입니다 :) –

답변

4

공제 안내서에는 특별한 이름 조회 규칙이 없으므로 정규화되지 않은 조회에서 이름을 찾을 수 있으면 정규화 된 이름을 사용할 필요가 없습니다. 사실, standard itself에서 공제 가이드는 자격이없는 이름을 사용

namespace std { 

    // [...] 

    template<class InputIterator, 
      class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>> 
    vector(InputIterator, InputIterator, Allocator = Allocator()) 
     -> vector<typename iterator_traits<InputIterator>::value_type, Allocator>; 

    // [...] 

} 

cppreference의 실행이 허용 될 때마다 규정 된 이름을 사용하는 것입니다, 그러나 이것은 문체 모호성을, 프리젠 테이션의 선명도를 향상 최소화하기 위해 선택과 플레이입니다 우리의 연결 인프라와 잘 어울립니다. deduction guides의 문법이 ( 전에 템플릿 이름->간단한 템플릿-ID이 필요하다는


참고. 어느 쪽도 자격을 허락하지 않습니다. 정규화되지 않은 이름의 또 다른 일반적인 예는 클래스의 삽입 된 클래스 이름 (템플릿)을 참조하려는 경우입니다.