2012-12-25 4 views
0

가능한 중복 : 나는 단순히 벡터 만들기 위해 노력하고
For nested templates, when did `>>` become standard C++ (instead of `> >`)?
Why did templates of templates (e.g. vector<vector<int> >) require a space between the closing angle brackets prior to C++0x?템플릿 문제

:

vector<Transform3D<double>> tempVector; 

이것은 컴파일 오류가를 내가 얻으세요 :

/../main.cpp:34:26: error: a space is required between consecutive right angle brackets 
    (use '> >') 
vector<Transform3D<double>> tempVector; 
         ^~ 
         > > 

무엇을하지 않는 말이, 왜 문제가 오류가 설명으로 벡터를 변경하여 해결된다 :

vector<Transform3D<double > > tempVector; 

vector<Transform3D<double>>vector<Transform3D<double > > 동일하지?

+0

C++ 11 이전 버전에서,'>>'는 컴파일러를'>>'연산자로 혼동 할 가능성이 높습니다. – birryree

답변

2

마지막 >> 문자가 단일 연산자 (operator>>)로 구문 분석되기 때문에 (적어도 C++ 11 이전에는) 동일하지 않습니다. 그 사이에 공백을 넣으면 예상되는 동작이 발생합니다.

컴파일러가 <:을 tigraph/digraph의 시작으로 구문 분석하는 경우에도 같은 상황이 발생합니다. 예 :

N<::T> // <: parsed as [ 

연산자를 구분하는 공백은 코드가 올바르게 작동하게합니다.

1

>>은 비트 시프트 연산자이기 때문에 더 새로운 컴파일러가이 둘을 구별 할 수 있습니다.