NeuroWhAI의 잡블로그

[C++] Concept 맛보기 본문

개발 및 공부/언어

[C++] Concept 맛보기

NeuroWhAI 2020. 1. 10. 23:32


#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에서 테스트해봤습니다.
예시는 간단한데 실제로 쓰이는 걸 보니까 좀 괴상하게 생기긴 했...



Comments