3 분 소요

개요

컨셉템플릿 인자auto제약 조건(constraint)을 주어 특정 타입만 사용하게 할 수 있습니다.

1
2
3
4
5
template<typename T>
requires std::integral<T> || std::floating_point<T> // T 정수 타입이나 실수 타입이어야 하합니다. 
T Add_20(T a, T b) {
    return a + b;
}

자세한 사용법은 컨셉을 참고하기 바라며, STL에서는 기본으로 사용할 수 있는 다양한 컨셉들을 제공합니다.

핵심 언어 컨셉

항목 내용
same_as<T, U> (C++20~) T, U 타입이 같습니다.
derived_from<Base, Derived> (C++20~) BaseDerived의 부모 개체이며, DerivedBase로 변환될 수 있습니다.
convertible_to<From, To> (C++20~) FromTo로 변환될 수 있습니다.
common_reference_with (C++20~) (작성중)
common_with (C++20~) (작성중)
integral<T> (C++20~) T는 정수 타입(bool, char, signed char, unsigned char, wchar_8, char8_t, char16_t, char32_t, short, unsigned short, int, unsigned int, long, unsigned long, long long, unsigned long long)입니다.
signed_integral<T> (C++20~) integral<T> 이고 부호가 있습니다.
unsigned_integral<T> (C++20~) integral<T> 이고 부호가 없습니다.
floating_point<T> (C++20~) T는 실수 타입(float, double, long double)입니다.
assignable_from<Left, Right> (C++20~) Left 타입에 Right 타입을 복사 대입이나 이동 대입할 수 있습니다.
swappable<T>, swappable_with<T, U> (C++20~) T를 바꿔치기 할 수 있습니다.
TU를 바꿔치기 할 수 있습니다.
destructible<T> (C++20~) T예외 발생 없이 소멸할 수 있습니다.
constructible_from<T, ... Args> (C++20~) T예외 발생 없이 소멸할 수 있고, Args로 생성할 수 있습니다.
default_initializable<T> (C++20~) T예외 발생 없이 소멸할 수 있고, T{}로 생성할 수 있습니다.
move_constructible<T> (C++20~) T예외 발생 없이 소멸할 수 있고, T이동 생성할 수 있습니다.
copy_constructible<T> (C++20~) T예외 발생 없이 소멸할 수 있고, T이동 생성할 수 있고, T복사 생성할 수 있습니다.

비교 컨셉

항목 내용
boolean-testable (C++20~) (작성중)
equality_comparable<T>, equality_comparable_with<T, U> (C++20~) T 혹은 TU간에 ==, != 를 할 수 있습니다.
totally_ordered<T>, totally_ordered_with<T, U> (C++20~) T 혹은 TU간에 ==, !=, <, >, <=, >=를 할 수 있습니다.
three_way_comparable<T>, three_way_comparable_with<T, U>(C++20~) T 혹은 TU간에 <=>를 할 수 있습니다.

개체 컨셉

항목 내용
movable<T> (C++20~) swappable<T>이고, T예외 발생 없이 소멸할 수 있고, T이동 연산할 수 있습니다.
copyable<T> (C++20~) movable<T>이고, 복사 연산이 가능합니다.
semiregular<T> (C++20~) copyable<T>이고, default_initializable<T>입니다. 즉, 기본 생성자, 복사 생성자, 이동 생성자, 복사 대입 연산자, 이동 대입 연산자, 예외 발생 없는 소멸자이고, swappable<T>입니다.
regular<T> (C++20~) semiregular<T>이고, ==, != 를 할 수 있습니다.

함수자 컨셉

항목 내용
invocable<F, ... Args>, regular_invocable<F, ... Args> (C++20~) F(Args)로 호출할 수 있습니다.
predicate<F, ... Args> (C++20~) regular_invocable<F, ... Args>이고, bool을 리턴합니다.
relation (C++20~) (작성중)
equivalence_relation (C++20~) (작성중)
strict_weak_order (C++20~) (작성중)

이터레이터 컨셉

항목 내용
indirectly_readable (C++20~) *을 이용하여 간접적으로 읽을 수 있습니다.
indirectly_writable (C++20~) (작성중)
weakly_incrementable (C++20~) (작성중)
incrementable (C++20~) (작성중)
input_or_output_iterator (C++20~) ++, *을 할 수 있습니다.
sentinel_for (C++20~) (작성중)
sized_sentinel_for (C++20~) 이터레이터의 시작(begin())과 끝(end())의 차로 요소의 갯수를 구할 수 있습니다.
input_iterator (C++20~) input_or_output_iterator이고, indirectly_readable입니다.
output_iterator (C++20~) (작성중)
forward_iterator (C++20~) ++, ++, *, ==, !=을 할 수 있습니다.
bidirectional_iterator (C++20~) forward_iterator이고, --을 할 수 있습니다.
[random_access_iterator] (C++20~) bidirectional_iterator이고, +=, +, -=, -, [], <, <=, >, >=을 할 수 있습니다.
contiguous_iterator (C++20~) (작성중)

유틸리티 컨셉

항목 내용
indirectly_unary_invocable (C++20~)
indirectly_regular_unary_invocable (C++20~)
(작성중)
indirect_unary_predicate (C++20~) (작성중)
indirect_binary_predicate (C++20~) (작성중)
indirect_equivalence_relation (C++20~) (작성중)
indirect_strict_weak_order (C++20~) (작성중)
indirectly_movable (C++20~) (작성중)
indirectly_movable_storable (C++20~) (작성중)
indirectly_copyable (C++20~) (작성중)
indirectly_copyable_storable (C++20~) (작성중)
indirectly_swappable (C++20~) (작성중)
indirectly_comparable (C++20~) (작성중)
permutable (C++20~) (작성중)
mergeable (C++20~) (작성중)
sortable (C++20~) (작성중)
indirect_result_t (C++20~) (작성중)
projected (C++20~) (작성중)

범위(Range) 컨셉

항목 내용
ranges::range (C++20~) 범위(Range)입니다. ranges::beginranges::end가 가능해야 합니다.
ranges::borrowed_range (C++20~) (작성중)
ranges::sized_range (C++20~) 상수 시간에 크기를 알 수 있는 범위(Range)입니다.
ranges::view (C++20~) 범위(Range) 요소들을 재배치/필터링한 일종의 범위(Range)입니다.
ranges::input_range (C++20~) ranges::range이고 input_iterator를 제공합니다.
ranges::output_range (C++20~) (작성중)
ranges::forward_range (C++20~) ranges::input_range이고 forward_iterator를 제공합니다.
ranges::bidirectional_range (C++20~) ranges::forward_range이고, bidirectional_iterator를 제공합니다.
ranges::random_access_range (C++20~) 랜덤 접근을 지원하는 범위(Range)입니다.
ranges::contiguous_range (C++20~) (작성중)
ranges::common_range (C++20~) ranges::range이고, ranges::beginranges::end가 같은 타입이어야 합니다.
ranges::viewable_range (C++20~) (작성중)
ranges::constant_range (C++20~) (작성중)

포맷팅 컨셉

항목 내용
formattable (C++23~) (작성중)

태그:

카테고리:

업데이트:

댓글남기기