[C++] 클래스템플릿의 멤버템플릿 호출시 파싱 모호성 문제

https://en.cppreference.com/w/cpp/language/dependent_name#The_template_disambiguator_for_dependent_names

C++은 알다시피 생각없이 문법을 기워올려서 말도안되게 복잡하고 사람을 망치는 성향이 있다.

이것도 그런 쓸데없는 조잡성 중 하나다.
The typename disambiguator for dependent names 라고 한다.

자. 만약 클래스 안에 함수 템플릿이 있다면, 다음과 같이 호출할 수 있다.

이건 별문제가 없다.

이번엔 함수 템플릿을 클래스 템플릿으로 감싸보겠다.

여기까지도 큰 문제는 없다.

그런데, 저기서 템플릿 구체화 타입을, 직접 지정하는 것이 아니라 또다른 템플릿 매개변수를 넘기려고 하면 문제가 생긴다.

이런 오류가 생긴다.
foo에서 <를 관계연산자와 혼동하게 되는 파싱 문제다.

이걸 해결하려면 다음과 같이 template 키워드를 쑤셔넣어줘야한다.

위에서는 객체를 기반으로 동적호출을 했지만, 스코프나 this 등으로 호출할 때도 같은 문제가 발생할 수 있다.
그럴때도 마찬가지로 식별자 왼쪽에 template을 써주면 된다.

그렇다.