Namespaces
Variants

std::experimental::ranges:: Writable

From cppreference.net
헤더 파일에 정의됨 <experimental/ranges/iterator>
template < class Out, class T >

concept bool Writable =
requires ( Out && o, T && t ) {
* o = std:: forward < T > ( t ) ;
* std:: forward < Out > ( o ) = std:: forward < T > ( t ) ;
const_cast < const ranges :: reference_t < Out > && > ( * o ) =
std:: forward < T > ( t ) ;
const_cast < const ranges :: reference_t < Out > && > ( * std:: forward < Out > ( o ) ) =
std:: forward < T > ( t ) ;
} ;

/* 위의 네 가지 표현식 중 어느 것도 동등성 보존을 요구하지 않음 */
(ranges TS)

Writable<Out, T> 개념은 T 로 인코딩된 타입과 값 범주를 가진 값을 반복자 Out 의 참조된 객체에 쓰기 위한 요구사항을 명시합니다.

E T decltype ( ( E ) ) 인 표현식이고, o Out 타입의 역참조 가능한 객체일 때, Writable<Out, T> 는 다음 조건에서만 만족됩니다:

  • 만약 Readable < Out > && Same < ranges :: value_type_t < Out > , std:: decay_t < T >> 가 만족되면, 위의 할당 이후 * o 는 할당 전 E 값과 동일합니다.

o 는 위의 할당 표현식들을 평가한 후에 역참조 가능할 필요가 없습니다. 만약 E 가 xvalue인 경우, 그것이 나타내는 객체의 결과 상태는 유효하지만 지정되지 않습니다.

동등성 보존

표현식은 동일한 입력이 주어졌을 때 동일한 출력을 결과로 내놓는다면 등식 보존(equality preserving) 합니다.

  • 표현식의 입력은 피연산자들로 구성됩니다.
  • 표현식의 출력은 결과값과 표현식에 의해 수정된 모든 피연산자(있는 경우)로 구성됩니다.

동등성 보존이 요구되는 모든 표현식은 추가로 안정적(stable) 이어야 합니다: 동일한 입력 객체로 이러한 표현식을 두 번 평가할 때, 해당 입력 객체에 명시적인 수정이 개입되지 않는 한 동일한 출력을 가져야 합니다.

참고 사항

operator * 의 유일하게 유효한 사용은 대입 표현식의 좌측에서입니다. 쓰기 가능한 타입의 동일한 값을 통한 대입은 한 번만 발생할 수 있습니다.

const_cast 를 사용한 필요한 표현식들은 Readable 객체들이 prvalue reference 타입을 가질 경우 실수로 Writable 의 문법적 요구사항을 충족하는 것을 방지하면서, 프록시 참조가 constness가 얕은(shallow) 한 계속 작동할 수 있도록 허용합니다. 자세한 내용은 Ranges TS issue 381 를 참조하십시오.