템플릿 함수에서 다른 람다에서 빈 (캡처가없는) 람다를 식별하는 방법을 찾고 있습니다. 나는 현재 C ++ 17을 사용하고 있지만 C ++ 20 답변도 궁금합니다.
내 코드는 다음과 같습니다
template<typename T>
auto func(T lambda) {
// The aguments of the lambdas are unknown
if constexpr (/* is captureless */) {
// do stuff
}
}
C ++ 표준 (17 또는 20)에서 함수 포인터로 변환 할 수있는 캡처없는 람다는 수율을 보장 할 std::is_empty
수 있습니까?
이 코드를 예로 들어 보겠습니다.
auto a = []{}; // captureless
auto b = [c = 'z']{}; // has captures
static_assert(sizeof(a) == sizeof(b)); // Both are the same size
static_assert(!std::is_empty_v<decltype(b)>); // It has a `c` member
static_assert(std::is_empty_v<decltype(a)>); // Passes. It is guaranteed?
+
여기 에서 작동하는 것 같습니다 .
+lambda
) 로의 변환이 올바른지 확인할 수 있습니다 .