В следующем примере демонстрируется проблема, с которой я столкнулся в 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'
, но текущий режим захвата по умолчанию не позволяет его
Что стандарт говорит об этом случае? Должно ли быть найдено безоговорочное имя? Требуется ли полное имя для захвата this
?