Является ли лямбда-сравнение детерминированным?

Как известно, сравнение двух совпадающих строковых литералов может привести к равенству:

"hello" == "hello" //could be true or false

То же самое верно для лямбда:

[](){} == [](){} //false - guaranteed?

Можно ли компилятору оценить это по своему усмотрению, или он уверен, что он будет оценивать до false? Это законно? Что на самом деле сравнивает?

Ответы

Ответ 1

Вы не можете сравнить лямбда для равенства. То, что вы видите в этом маленьком фрагменте, - это лямбды, которые преобразуются в указатели на функции, а затем сопоставляются указатели на функции. Нет никаких гарантий того, что эти указатели функций являются или не совпадают, что означает, что результат может быть либо true, либо false.