제약을 선언한다
concept으로 템플릿 본문이 기대하는 연산을 함수 선언부에서 먼저 보여 준다.
concept, ranges, coroutine, module은 서로 달라 보이지만 공통 목표는 같다. 더 이른 단계에서 제약을 표현하고, 더 좁은 범위만 읽게 만드는 것이다.
concept으로 템플릿 본문이 기대하는 연산을 함수 선언부에서 먼저 보여 준다.
ranges와 views로 필터, 변환, 제한을 데이터 흐름에 가깝게 표현한다.
빌드 시스템, 컴파일러 버전, 팀 코드 스타일이 준비되지 않았다면 부분 적용부터 시작한다.
template <typename T>
concept Addable = requires(T a, T b) { a + b; };
template <Addable T>
T add(T a, T b) { return a + b; }