Каковы правила поиска при вызове функции из лямбды?

Следующий пример демонстрирует проблему, с которой я столкнулся в VC++ 2010:

class Foo
{
    template<class T>
    static T foo(T t) { return t; }

public:
    void test()
    {
        auto lambda = []() { return foo(1); }; // call to Foo::foo<int>
        lambda();
    }
};

VC++ создает: ошибку C3861: 'foo' : идентификатор не найден

Если я квалифицирую вызов foo: Foo:: foo (1); тогда этот пример компилируется предупреждением: предупреждение C4573: использование 'Foo:: foo' требует от компилятора захвата 'this' , но текущий режим захвата по умолчанию не допускает его

Что стандарт говорит об этом случае? Должно ли быть найдено неквалифицированное имя? Требует ли квалифицированное имя захвата этого ?

-121--1646968- PHP - Break after return? Нужно ли использовать break здесь или он перестанет закольцовываться и вернется один раз? для ($ i = 0; $ i < 5; $ i++) {if ($ var [$ i] = = ") return false ;//break; Спасибо!

Нужно ли использовать break здесь или он перестанет закольцовываться и вернется один раз?

for($i = 0; $i < 5; $i ++) {
    if($var[$i] === '') return false;
    // break;
}

Спасибо!

23
задан headacheCoder 2 September 2011 в 08:05
поделиться