std::declval은 rvalue ref 을 내뱉기 때문에 인자로 lvalue reference 가 필요할 경우에는 못씀.
암튼 처음에는 멤버 함수의 증가 대입연산자 함수가 있는지를 확인하고,
없으면 해당 타입의 스코프 안에서 바깥에서 구현된 증가 대입연산자가 존재하는 지를 확인함.
스코프 안에서 못 찾거나 아예 없으면 그냥 F 을 날려서 찾지 못했다고 value 에 false 을 넣음.
덤 :: https://en.cppreference.com/w/cpp/language/expressions 에서
안쪽이랑 바깥쪽에 둘다 선언할 수 있는 연산자 오버로딩들은 위 테크닉을 변형해서
오버로딩 된 함수가 있는지를 확인하는데 쓰일 수 있을 것 같음.
덤 2 :
대입 연산자 시리즈들은 함수 포인터에 대한 오버로딩을 해도 상관이 없는데,
rvalue 인스턴스가 리턴 타입인 수식 연산 오퍼레이터 (+, -, /, *) 애들은 위처럼 리턴 타입에 대한 오버로딩으로
TMP 하지 않으면 rvalue 에 대한 어드레스를 가져올 수 없다고 에러가 남.
댓글 1