Когда лямбда гарантирована быть тривиальной, если вообще когда-либо?Когда лямбда тривиальна?
Я предполагал, что если он захватывает только тривиальные типы или ничего, это будет тривиально. Тем не менее, у меня нет никаких стандартов.
Мотивация заключалась в перемещении некоторого кода с Visual C++ 12-14 и обнаружении каких-то статических утверждений не удалось при работе с лямбдами, которые я считал тривиальными.
Пример:
#include <type_traits>
#include <iostream>
using namespace std;
int main()
{
auto lambda = [](){};
cout << boolalpha << is_trivially_copyable<decltype(lambda)>{} << endl;
}
Это производит false
на vs140 но true
в vs120 и звоном. Я не смог проверить gcc из-за отсутствия gcc> = 5. Я ожидаю, что это регресс в vs140, но я не уверен в правильном поведении здесь.
gcc 5.2 производит также 'истинные': [Demo] (http://coliru.stacked-crooked.com/a/a7dc4ee4e32fb70a) – Jarod42