쓰면서 느낀 건데 불편한 점이 있네


첫번째는 concept 선언문에서 alias를 못 만듦.


예시:


template<typename C> concept Concept = requires(C c) { using value_type = typename C::value_type; };


저거 에러 뜬다. 그래서 global scope (혹은 namespace) 에 따로 만들거나


template<typename C> concept Concept = requires(C c) { {some_operation(c)} -> std::same_as<typename C::value_type>; };


일일히 쳐야한다.


두번째 불편한 점은 concept를 겹쳐서 못 씀.


예시:


template<typename T> concept Concept0 = requires(T t) { /* implementation */ }; template<Concept0 T> concept Concept1 = requires(T t) { /* implementation */ };


왜인진 모르겠는데 막아놨더라.