Меня всегда интересовало, почему нельзя использовать локально определенные классы в качестве предикатов для алгоритмов STL.
В вопросе: Подход к алгоритмам STL, лямбда, локальные классы и другие подходы , BubbaT упоминает, что ' Поскольку стандарт C ++ запрещает использование локальных типов в качестве аргументов '
Пример кода:
int main() {
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
std::vector<int> v( array, array+10 );
struct even : public std::unary_function<int,bool>
{
bool operator()( int x ) { return !( x % 2 ); }
};
std::remove_if( v.begin(), v.end(), even() ); // error
}
Кто-нибудь знает, где в стандарте ограничение? В чем причина запрета локальных типов?
РЕДАКТИРОВАТЬ : Начиная с C ++ 11, в качестве аргумента шаблона допустимо использовать локальный тип.