decay-copy
template< class T >
typename std::decay<T>::type /*decay-copy*/( T&& value );
|
(since C++11) (until C++20) (*설명 전용*) |
|
template< class T >
requires std::convertible_to<T, std::decay_t<T>>
constexpr std::decay_t<T> /*decay-copy*/( T&& value )
noexcept(std::is_nothrow_convertible_v<T, std::decay_t<T>>);
|
(since C++20) (*설명 전용*) |
|
반환 값: std::forward<T>(value) (소멸된 타입으로 암시적 변환됨), value의 소멸된 prvalue 복사본.
매개변수
| value | - | 복사할 값 |
반환값
value 의 붕괴된 복사본을 prvalue로 반환합니다.
참고 사항
decay-copy
는
LWG 이슈 929
의 해결을 통해 도입되었습니다. 이는 초기에
동시성 지원 라이브러리
에서 값으로 전달 시 인자가 decay 되도록 보장하기 위해 사용되었으며, 이후
범위 라이브러리
에서도 사용됩니다.
C++23에서 도입된 언어 기능
auto
(
x
)
또한 decayed 복사본을 prvalue로 생성할 수 있게 합니다. 유일한 차이점은
decay-copy
는 항상
materializes
value
하고 복사본을 생성하는 반면,
auto
(
expr
)
는
expr
이 prvalue인 경우 no-op이라는 점입니다.
표준 라이브러리에서
decay-copy
의 모든 사용처(아래 참조) 중
views::all
,
ranges::take_view
및
ranges::drop_view
를 제외한 나머지는 C++23부터
auto
(
x
)
로 대체되었습니다.
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 3724 | C++20 |
decay-copy
가 제약되지 않았음
|
제약됨 |
참고 항목
새로운
thread
객체를 생성함
(
std::thread
의 public 멤버 함수)
|
|
새로운
jthread
객체를 생성함
(
std::jthread
의 public 멤버 함수)
|
|
|
(C++11)
|
함수를 비동기적으로 실행하고(새 스레드에서 실행될 수 있음) 결과를 담을
std::future
를 반환함
(함수 템플릿) |
|
(C++20)
|
범위의 시작을 가리키는 반복자를 반환함
(커스터마이제이션 포인트 객체) |
|
(C++20)
|
범위의 끝을 나타내는 센티널을 반환함
(커스터마이제이션 포인트 객체) |
|
(C++20)
|
범위에 대한 역방향 반복자를 반환함
(커스터마이제이션 포인트 객체) |
|
(C++20)
|
범위에 대한 역방향 끝 반복자를 반환함
(커스터마이제이션 포인트 객체) |
|
(C++20)
|
범위의 크기와 같은 정수를 반환함
(커스터마이제이션 포인트 객체) |
|
(C++20)
|
연속 범위의 시작 부분에 대한 포인터를 얻음
(커스터마이제이션 포인트 객체) |
|
(C++20)
|
view
의 모든 요소를 포함하는
range
(별칭 템플릿) (범위 어댑터 객체) |
|
(C++20)
|
다른
view
의 처음 N개 요소로 구성된
view
(클래스 템플릿) (범위 어댑터 객체) |
|
(C++20)
|
다른
view
의 요소들 중 처음 N개 요소를 건너뛴
view
로 구성됨
(클래스 템플릿) (범위 어댑터 객체) |