Notice
Recent Posts
Recent Comments
NeuroWhAI의 잡블로그
[C++] Concept 맛보기 본문
#include <iostream>
// 간단한 컨셉 정의.
template <typename T>
concept Eq =
requires(T a, T b) {
{ a == b } -> bool;
{ a != b } -> bool;
};
// 다른 컨셉과 여러 제약을 포함하는 컨셉 정의.
template <typename T>
concept EqSum =
requires(T a, T b) {
{ a + b } -> T;
}
&& requires(T a) {
{ a + a } -> T;
}
&& Eq<T>;
struct Foo {};
// 간단한 컨셉 사용 예시.
template <EqSum T>
// template <typename T> requires EqSum<T> // 실제론 이것과 동일.
bool is_same(T a, T b) {
std::cout << a + b << std::endl;
return a == b;
}
int main() {
static_assert(EqSum<int>);
//static_assert(Eq<Foo>);
// error C2607: 정적 어설션이 실패했습니다.
is_same(1, 1);
//is_same(Foo{}, Foo{});
// error C2672: 'is_same': 일치하는 오버로드된 함수가 없습니다.
// error C7602: 'is_same': 관련 제약 조건이 충족되지 않습니다.
return 0;
}
VS2019에서 테스트해봤습니다.
예시는 간단한데 실제로 쓰이는 걸 보니까 좀 괴상하게 생기긴 했...
'개발 및 공부 > 언어' 카테고리의 다른 글
[Rust] Generics와 Associated Types (0) | 2020.04.04 |
---|---|
[Rust] 직접 block_on 함수 만들기 (포스팅 소개) (0) | 2020.01.31 |
[Rust] Pin과 Unpin 설명. (0) | 2019.09.26 |
[Rust] Async 공부... (0) | 2019.08.08 |
[C++] ref-qualified member functions : 값의 종류에 따라 메소드 오버로딩하기 (0) | 2019.02.22 |
Comments