Функция C2326 не может получить доступ к 'bar' при определении лямбды внутри локального класса - PullRequest
4 голосов
/ 13 февраля 2011

Я столкнулся с какой-то странной ошибкой компилятора, связанной с локальными классами и лямбдами. Я сузил его до следующего примера:

int main()
{
    class test {
        void foo(int bar) {
            auto lambda = [=] (int) { return bar; };
        }
    };
    return 0;
}

И VS10 говорит:

ошибка C2326: 'void main :: test :: foo (int)': функция не может получить доступ к 'bar'

Есть ли какие-либо ограничения на использование лямбда-выражений в локальных классах или это ошибка в компиляторе?

Спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2011

Я могу подтвердить, что это происходит в VS10 только тогда, когда класс определен в функции, и лямбда принимает параметр. В g ++ таких проблем не возникает.

Я считаю, что это действительно ошибка, если вы откроете дефект, пожалуйста, сделайте ссылку на него здесь, чтобы мы могли его исправить (в противном случае дайте мне знать, и я открою дефект).

0 голосов
/ 13 февраля 2011

А ты пробовал

int main()
{
    class test {
        void foo(int bar) {
            auto lambda = [bar] (int) { return bar; };
        }
    };
    return 0;
}

Возможно, реализация lambdas в VS10 не завершена, потому что ваш пример отлично работает на g ++ 4.5 - http://www.ideone.com/5xQpz

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...