제가 STL 공부하기전에 이펙티브 모던 C++ 보면서 C++14에서 새로 적용된 문법 공부하고있는데여

auto&&가 universal ref라고 해서 rval인지 lval인지 컴파일타임 때 컴파일러가 결정해준다고 그러더라구여...

그래서 아래와 같은 코드로 테스트를 해봤는데


int main ()

{

  int a[3] = {1,2,3};

  auto&& b = a[2];

  b = 4;

  cout << a[2];        // 4

  return 0;

}


이러케 되더라구요. 이까지는 이해를 했어요, a[2]의 return 값이 int&이고,

auto&&가 a[2]의 타입을 따라간거니깐...


근데 뒤에 좀 더 읽다보니깐 decltype(auto)가 등장하더라구요.

decltype규칙을 따른다고 하는데, 이게 함수를 정의할때 반환값이 int& 더라도

반환 타입에 auto를 적으면 int가 된다고 하더라구요, 그래서 decltype(auto)를 명시함으로써 decltype 규칙을 따라 int& 된다고 합니다.

근데 함수 선언부가 아닌 스코프 안에서는 결국 decltype(auto)가 auto&&와 같은거겠네요?