Я обнаружил это странное поведение с __PRETTY_FUNCTION__
, но странная часть больше связана с тем, что, как я полагаю, является правильным поведением, а не с причудой в раскладывании.Я могу ошибаться.
auto lambda1 = [] { return __PRETTY_FUNCTION__; };
auto lambda2 = [] { return __PRETTY_FUNCTION__; };
//static_assert(std::is_same<decltype(lambda1), decltype(lambda2)>(), "Distinct types!");
std::cout << pretty(lambda1) << "\n" << pretty(lambda2) << std::endl;
lambda1(); // ...with T = main(int, const char**)::<lambda()>
lambda2(); // ...with T = main(int, const char**)::<lambda()>
Теперь меня не удивляет, что они не относятся к одному и тому же типу - только то, что они различны и не отражают это в своей подписи.(Это работает так же, когда лямбда-выражения возвращают ноль.) Почему это будет?
Я также укажу, что тип возвращаемого значения вообще не отображается, чего я никогда не видел в обычномфункция.Я уверен, что тип возвращаемого значения является строго типизированным и является фундаментальной частью типа лямбды, так почему бы его не указывать?