std :: function <> и компилятор Intel версии 11.1 - PullRequest
6 голосов
/ 30 июня 2011

У меня проблемы с работой лямбда-функций в компиляторе Intel, в частности, следующий код не будет компилироваться:

template<typename T>
std::function<T (int)>  make_func(T x) {
  return [=](int index) -> T
  {
     return x;
  };
}

Я получаю ошибку

error: namespace "std" has no member "function"

Код компилируется и отлично работает на моем Mac (macports gcc версия 4.5).Ошибка на работе, где мы используем компилятор Intel версии 11.1.Он принимает лямбда-функции (с опцией -std = c ++ 0x), например:

auto lam = [=](int j) -> int {
    printf("testing for lambdas: %d\t%d\n", n, j);
    return n;
};

int g = lam(7);

Версия gcc, установленная на работе, - 4.1.2, поэтому я предполагаю, что стандартбиблиотека старая?

/bin/libc.so.6

говорит, что его версия 2.5 скомпилирована с gcc 4.1.2.

Есть ли способ обойти это?

заранее спасибо за любую помощь

Ответы [ 2 ]

6 голосов
/ 30 июня 2011

Я получаю такое же поведение с icc 11.1 в системе, где установлен gcc 4.5.2.

Заголовок

g++ <functional> защищен #ifdef __GXX_EXPERIMENTAL_CXX0X__, который не определяется при использовании icc.

Я бы рассмотрел переключение на boost :: function в этой настройке, которая, конечно, работает с icc.

1 голос
/ 30 июня 2011

Ну, приведенный код не включает один заголовок.И все же вы ссылаетесь на стандартную библиотеку std::function.

Так что нет, она не компилируется.Как и в любой другой части стандартной библиотеки, вам необходимо включить заголовок, в котором определено std::function: <functional>.

...