Лямбда-захват вызывает ошибку несовместимых типов операндов?

Рассмотрим следующий код:

main()
{
    bool t;
    ...
    std::function<bool (bool)> f = t ? [](bool b) { return b; } : [](bool b) { return !b; }; // OK
    std::function<bool (bool)> f = t ? [t](bool b) { return t == b; } : [t](bool b) { return t != b; }; // error
}

При компиляции с Clang 3.1 назначение лямбды без перехвата работает, в то время как сбой перехвата:

main.cpp:12:36: error: incompatible operand types ('<lambda at main.cpp:12:38>' and '<lambda at main.cpp:12:71>')
        std::function<bool (bool)> f2 = t ? [t](bool b) { return t == b; } : [t](bool b) { return t != b; }; // error
                                          ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Почему захват одной и той же переменной приводит к тому, что 2 лямбда-типа имеют несовместимые типы?

Ответы на вопрос(1)

Ваш ответ на вопрос