std::declval은 rvalue ref 을 내뱉기 때문에 인자로 lvalue reference 가 필요할 경우에는 못씀.

암튼 처음에는 멤버 함수의 증가 대입연산자 함수가 있는지를 확인하고,

없으면 해당 타입의 스코프 안에서 바깥에서 구현된 증가 대입연산자가 존재하는 지를 확인함.

스코프 안에서 못 찾거나 아예 없으면 그냥 F 을 날려서 찾지 못했다고 value 에 false 을 넣음.


덤 :: https://en.cppreference.com/w/cpp/language/expressions 에서

안쪽이랑 바깥쪽에 둘다 선언할 수 있는 연산자 오버로딩들은 위 테크닉을 변형해서

오버로딩 된 함수가 있는지를 확인하는데 쓰일 수 있을 것 같음.


덤 2 :



대입 연산자 시리즈들은 함수 포인터에 대한 오버로딩을 해도 상관이 없는데,

rvalue 인스턴스가 리턴 타입인 수식 연산 오퍼레이터 (+, -, /, *) 애들은 위처럼 리턴 타입에 대한 오버로딩으로

TMP 하지 않으면 rvalue 에 대한 어드레스를 가져올 수 없다고 에러가 남.