std::indirectly_copyable_storable
std::indirectly_copyable_storable (간접 복사·저장 가능 컨셉)
indirectly_readable 타입과 indirectly_writable 타입 사이의 관계를 명세하는 컨셉이에요. indirectly_copyable 외에도, 중간 객체를 통해 복사할 수 있음을 명세해요. C++20부터 있어요.
출처: cppreference
본문
<iterator> 헤더에 정의돼 있어요.
template< class In, class Out >
concept indirectly_copyable_storable =
std::indirectly_copyable<In, Out> &&
std::indirectly_writable<Out, std::iter_value_t<In>&> &&
std::indirectly_writable<Out, const std::iter_value_t<In>&> &&
std::indirectly_writable<Out, std::iter_value_t<In>&&> &&
std::indirectly_writable<Out, const std::iter_value_t<In>&&> &&
std::copyable<std::iter_value_t<In>> &&
std::constructible_from<std::iter_value_t<In>, std::iter_reference_t<In>> &&
std::assignable_from<std::iter_value_t<In>&, std::iter_reference_t<In>>;
indirectly_copyable_storable 컨셉은 indirectly_readable 타입과 indirectly_writable 타입 사이의 관계를 명세해요. indirectly_copyable에 추가로, indirectly_readable 타입에서의 복사가 중간 객체를 통해 수행될 수 있음을 명세해요.
의미 요구사항
역참조 가능한 객체가 있을 때, In과 Out은 그 값 타입이 copyable이고 값 타입이 참조로부터 생성·대입 가능할 때만 std::indirectly_copyable_storable<In, Out>을 모델링해요.
예제
#include <iterator>
#include <vector>
#include <concepts>
int main()
{
static_assert(std::indirectly_copyable_storable<std::vector<int>::iterator,
std::vector<int>::iterator>);
}