-
Notifications
You must be signed in to change notification settings - Fork 3
Description
Item 24의 내용 중 아래와 같은 내용이 나옵니다.
Even the simple presence of a const qualifier is enough to disqualify a reference from being universal:
template<typename T> void f(const T&& param); // param is an rvalue reference
그런데 이유는 전혀 나오지 않습니다.
저자는 단지 "Universal reference(== forwarding reference) 는 반드시 type deduction 이 있으면서 "T&&" 형태가 아니면 Universal reference 가 안된다" 라고만 설명하고 있습니다.
Scott mayers 의 다른 article
StackOverflow 에서도 동일한 의문을 제기하는 글이 있습니다.
https://stackoverflow.com/questions/38814939/why-adding-const-makes-the-universal-reference-as-rvalue
답변에 따르면 먼저 표준에는 forwarding reference 의 정의 자체가 "A forwarding reference is an rvalue reference to a cv-unqualified template parameter"로 const 가 없는 Rvalue reference 형태라고 되어 있습니다. 그리고 이렇게 한 이유는 const T&& 도 universal reference 로 허용하게 되면 rvalue 만 받고자 하는 함수 overloading 을 만들 수가 없기 때문이라고 설명하고 있습니다.
The problem is that we would have no way to overload a template function who takes only rvalue reference as parameter if both T && and const T && are allowed to use as forwarding references. – Carousel
- 추후 업데이트 필요