Poszukuję sposobu na identyfikację pustych (niewychwyconych) lambd z innych lambd w funkcji szablonu. Obecnie używam C ++ 17, ale jestem również ciekawy odpowiedzi na C ++ 20.
Mój kod wygląda następująco:
template<typename T>
auto func(T lambda) {
// The aguments of the lambdas are unknown
if constexpr (/* is captureless */) {
// do stuff
}
}
Czy standard C ++ (17 lub 20) gwarantuje, że bezbarwna lambda, którą można przekształcić we wskaźnik funkcji, również sprawi, że std::is_empty
wydajność będzie prawdziwa?
Weź ten kod jako przykład:
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?
+
wydaje się, że tutaj działa .
+lambda
) jest poprawnie sformułowana.