C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[75535] Re:typename 10.3 버전 컴파일 오류
빌더(TWx) [builder] 2310 읽음    2019-08-22 16:04
수야!╋ 님이 쓰신 글 :
: 안녕하세요. 수야입니다. ( 백만년 만이네요. 꾸벅 )
:
: 오랜시간 사용해오던 라이브러리가 10.3 rio 에서 컴파일 오류가 발생합니다.(최종 작업은 XE5입니다)
:
: 옵션에서 C++ Compilers(WIN32)의 Use 'classic' borland compiler 를 true로 해주면 컴파일이 되긴 하는데...
:
: 다른 라이브러리에서 문제가 발생하여 Use 'classic' borland compiler 를 false 상태로 컴파일이 되게 하고싶습니다.
:
: 발생하는 오류는 첨부파일의 275라인 expected a qualified name after 'typename'
: 등등등 입니다.
:
: 오랫만에 등장해 질문만 불쑥 올려 송구스럽지만.. 잘 부탁드립니다.



답변:


바빠서 요점만 남깁니다.


컴파일러가 template 코드를 파싱할 때...
어떤 요소가 템플릿 인수 T에 dependent 관계를 가질 경우 typename 키워드로 명시해 줘야하고
템플릿 파싱구조 상... two phase name lookup 으로 파서가 구현되어야 합니다.

two phase name lookup으로 컴파일러 파서가 구현되어 있어야
C++ compliant 요구조건을 충족하는 컴파일러가 되는 거고

그렇지 않은 경우 파서를 작위적으로 엉터리로 만들어 놓은 컴파일가 되는 거죠.

gcc, clang, vc++ 와 같은 컴파일러는 two phase name lookup 으로 파서가 구현되어 있는
C++ compliant 요구조건을 만족하는 컴파일러 입니다.


본론으로 돌아와서...


protected:
	typename ListObject				m_ListObject;
	typename ListObject::iterator	m_ListPosition;
	typename ListObject::reverse_iterator	m_ListReveres_Position;


로 되어 있는 부분을...



protected:
   typename _T::ListObject				m_ListObject;
   typename ListObject::iterator	m_ListPosition;
   typename ListObject::reverse_iterator	m_ListReveres_Position;

   typedef typename ListObject::iterator IT_I;
   typedef typename ListObject::const_iterator IT_CI;
   typedef typename ListObject::reverse_iterator IT_RI;



위와 같이 바꾼 후...



public:
	inline void	RemoveAll()
	{
		ListObject::const_iterator iter_end( m_ListObject.end() );



위의 코드와 같이... 되어 있는 부분을...
two phase lookup 요구조건을 만족하도록

	inline void	RemoveAll()
	{
		IT_CI iter_end( m_ListObject.end() );



위와 같은 식으로 대체해 주면 됨.

using 키워드를 이용하면 코드를 간결하게 작성할 수 있는데, legacy 컴파일러에선 지원되지 않음.


two phase lookup 조건이냐 아니냐에 따라서 기인되는 코드의 실제동작의 차이는
전체코드 없이는 판단할 수 없고, 본인이 알아서 처리하세요.




+ -

관련 글 리스트
75533 typename 10.3 버전 컴파일 오류 수야!╋ 2250 2019/08/22
75535     Re:typename 10.3 버전 컴파일 오류 빌더(TWx) 2310 2019/08/22
75538         Re:Re:typename 10.3 버전 컴파일 오류 수야!╋ 2310 2019/08/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.