Здравствуйте, Сыроежка, Вы писали:
С>Я не вижу здесь синтаксической ошибки. Данное предложение
С>void fn( const std::list<pf> &l, int x )
С>из определения функции fn корректно, тем более, что я просто скопировал сюда уже оттранслированный код.
С>А есть ли еще дполнительные сообщения кроме данного аскетского сообщения? Вполне возможно, что это сообщение — реакция на ошибку, которая расположена в коде перед этой строкой.
С>Есть два варианта. Сначала закоментируйте предложение в функции main, где происходит вызов алгоритма for_each. Если код скомпилируется, то значит данное сообщение об ошибке есть не является следствием синтаксической ошибке.
С>Второе — я хорошо помню, что компиляторы Borland не могли работать с квалификатором const у массивов и контейнеров, когда те использовались со стандартными алгоритмами. То есть компилятор при инстанциировании шаблонов не справлялся с квалификатором const.
С>Поэтому когда выполните первую проверку, и код у вас скомпилируется ( в чем я не сомневаюсь, если только вы не сделали опечатку ), то просто уберите в объявлении первого параметра функции квалификатор const
Никаких других ошибок компилятор не выдает.
Вообщем то он ругается не на объявление функции, а на строку
std::for_each( l.begin(), l.end(), [&x]( pf f ){ f( x ); } );
Если ее за комментировать, то все компилится.
void fn( const std::list<pf> &l, int x )
{
// std::for_each( l.begin(), l.end(), [&x]( pf f ){ f( x ); } ); // it's ok
}
Слудующий код:
void fn( std::list<pf> &l, int x )
{
std::for_each( l.begin(), l.end(), [&x]( pf f ){ f( x ); } ); // error
}
увы ошибка парсинга. Скорее всего компилятор не поддерживает синтаксиси лямбда-выражений.
Где можно посмотреть на синтаксис лямбда-выражений для С++, а то все встречается для С#?