문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 C++ (문단 편집) ===== 템플릿의 난해성 ===== [include(틀:토론 합의, 토론주소1=GustyUnsightlyWeeDesk#98, 합의사항1=C++TMP에 대한 비판을 서술하되 개발자가 의도한 상황에서 발생하지는 않으며 부수적 차원에서 발생하는 문제임을 명시하여 서술한다)] 상대적으로 느슨한 언어 설계에 의해 SFINAE와 같은 사실상 꼼수에 가까운 기법들이 사용되고 그 중 TMP 또한 이에 포함된다. 여기서 말하는 메타 프로그래밍은 컴파일 타임에 실행되는 프로그램이라는 넓은 의미를 가진다. 템플릿은 원래 일반화 프로그래밍을 위해 등장하였으나, 템플릿 타입 체크 등의 몇 가지 케이스들을 보완하기 위해 여러 기능들이 추가되기 시작했다. 이러한 기능들은 SFINAE[* 조건이 맞지 않는 템플릿이 들어오면 고의적으로 컴파일 에러를 발생시키는 트릭]와 같은 트릭에 사용되다가, 어느 때부터 C++ 템플릿을 활용하여 [[튜링 완전]]한 메타 언어로써 연산을 컴파일 타임에 수행할 수 있음을 발견했다. 이러한 흐름에서 등장한 템플릿 메타 프로그래밍은 C++의 강력한 기능이지만, 원론적으로는 언어 표준 명세에서 지원하는 것이 아니였다보니 이를 이해하거나 작성하기 어려우며 컴파일도 매우 오래 걸린다. C++에서 손꼽는 어려운 특징 중 하나이다. [[https://stackoverflow.com/questions/21102154/why-doesnt-c-make-it-easier-to-make-compile-time-queries-on-types/21102445#21102445|#]] [[https://ofekshilon.com/2012/09/01/meta-programming-is-still-evil/|#]] SFINAE가 수행했던 타입 체크는 C++20에서 concept를 도입하여 템플릿에 명시적 조건을 추가할 수 있게 됨으로써 의미가 없게 되었다. [* 대부분 프로그래머에겐 의미가 없지만, 컴파일러 제작자에게는 의미가 있다. concept의 구현은 SFINAE 기반이기 때문이다]저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기