Следующий пример демонстрирует проблему, с которой я столкнулся в 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'
, но текущий режим захвата по умолчанию не допускает его
Что стандарт говорит об этом случае? Должно ли быть найдено неквалифицированное имя? Требует ли квалифицированное имя захвата этого
?
Нужно ли использовать break здесь или он перестанет закольцовываться и вернется один раз?
for($i = 0; $i < 5; $i ++) {
if($var[$i] === '') return false;
// break;
}
Спасибо!