사실 [](){}앞에 +만 붙여서 선언하면 컴파일러가 알아서 만들어줌ㅋㅋ근데 내부가 궁금해서 cppinsight로 확인해봤는데 꽤 신기하더라님들도 구경하셈ㅋㅋㅋ 네이밍만 보기쉽게 변경한거임
저거 표준임?
? 람다를 function pointer로 바꾸면 동작 할 리가 없는데. 람다는 struct storage를 갖고있는데 캡쳐하면 어떻게 하는데?
에초에 완전 다른 behavior인게 lambda는 struct storage라 캡처를 안 해도 1바이트임. thiscall로 동작해야하는데 포인터로 바꾸면 mem_fn도 아니고 어떻게 객체를 넘겨줌?
저거 캡쳐 없을 때만 컴파일됨
캡처 없어도 되면 안 되는데. empty struct storage는 표준상 1 byte임. sizeof([](){}) 해보셈 어떻게 하든간에 thiscall로 동작해야하는데? 저 operator가 비표준일 가능성 매우 농후.
결론 = UB
레퍼런스 줄테니까 읽어보셈ㅋㅋ
https://stackoverflow.com/a/18889029
https://timsong-cpp.github.io/cppwp/expr.prim.lambda#closure-7
https://timsong-cpp.github.io/cppwp/over.built#9
뭔 읽어보셈이야 ^^ㅣ발 A closure object behaves like a function object.
그럼 이건 함수가 두개 생성되는 판정인거지 정확히는
체크해보니까 맞네 lambda의 function operator를 함수 포인터로 만드는게 아니라 함수를 하나 더 만드는거네
변환같은소리하네 ^^ㅣ발
https://godbolt.org/z/94jM1G