Каждый лямбда-объект C ++ 0x имеет отдельный тип, даже если подпись одна и та же.
auto l1=[](){}; // one do-nothing lambda
auto l2=[](){}; // and another
l1=l2; // ERROR: l1 and l2 have distinct types
Если две лямбды C ++ 0x имеют одинаковый тип, они, следовательно, должны быть из одной строки кода.Конечно, если они захватывают переменные, они не обязательно будут идентичны, так как они могут быть получены из разных вызовов.
Однако лямбда-код C ++ 0x не имеет операторов сравнения, поэтому сравнивать нельзяэкземпляры, чтобы увидеть, действительно ли они одного и того же или просто одного и того же типа.Это имеет смысл, если подумать: если у захваченных переменных нет операторов сравнения, то вы не можете сравнивать лямбда-выражения этого типа, поскольку каждая копия может иметь разные значения для захваченных переменных.