Я всегда задавался вопросом, почему вы не можете использовать локально определенные классы в качестве предикатов для алгоритмов STL.Использование локальных классов с алгоритмами STL
В вопросе: Approaching STL algorithms, lambda, local classes and other approaches, 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
}
Кто-нибудь знает, где в Стандарт - это ограничение? В чем обоснование отказа от местных типов?
EDIT: Так как C++ 11, он является законным использование локального типа в качестве аргумента шаблона.
Я знаю, но я хотел бы знать, где посмотреть, могу ли я понять, почему. У вас есть ссылка на стандарт? –
Вы ссылаетесь на 14.3.1.2, "аргументы типа шаблона"? – greyfade
Я добавил некоторые сведения и ссылку, которые могут помочь. Подводя итог, ограничение было ошибкой, которая была бы быстро исправлена, если бы стандарт развивался быстрее ... – Klaim