Home Forums US Life c++ 퀴즈 퀴즈 퀴즈 c++ 퀴즈 퀴즈 퀴즈 Name * Password * Email std::is_same_v<A, B> 인 경우 decltype 표현이 레퍼런스 (A&) 타입으로 evaluate 되고 funmin 의 리턴 타입도 A 가 아니라 A& 이 됨. 종료된 서브루틴의 로컬 변수 레퍼런스를 cout 에 사용하는 셈이 되어 출력값의 올바름을 보장할 수 없게 됨. arithmetic operator 에 int 와 double 이 섞인 경우는 int 가 double로 implicit conversion 되는데 그러면 int 인 경우는 레퍼런스를 그대로 사용할 수 없게 되므로 decltype 표현이 double 이라는 non-reference type 이 되므로 결과값이 return by value 가 되어 올바름에 문제가 없음. 실무에서는 std::min 처럼 A==B==return_type 를 강제해서 사용자가 인자를 직접 원하는 방식으로 변형해 넣게끔 하는 게 버그 방지에 좋음. 언어 표준의 코너 케이스를 시험하는 퀴즈고, 예로 든 funmin 함수도 의도하지 않은 타입 변환이나 dangling 레퍼런스를 발생시킬 수 있는 위험한 디자인이므로 brain teaser 에 가까워 보임. I agree to the terms of service Comment