Я предполагаю, что это невозможно, потому что я получил следующую ошибку:
error C3533: 'auto': a parameter cannot have a type that contains 'auto'
Вот фрагмент кода для воспроизведения ошибки:
int myInts[] = {1,2,3,3,3,4};
std::vector<int> myVec(myInts, myInts + sizeof(myInts)/sizeof(int));
myVec.erase(
std::remove_if(myVec.begin(), myVec.end(),
[](auto i){return i==3;}), // lambda param error
myVec.end());
Теперь, если вы напишите это, все в порядке, и он сотрет элементы со значением 3:
int myInts[] = {1,2,3,3,3,4};
std::vector<int> myVec(myInts, myInts + sizeof(myInts)/sizeof(int));
myVec.erase(
std::remove_if(myVec.begin(), myVec.end(),
[](int i){return i==3;}),
myVec.end());
Так вы можете просто не использовать auto
в качестве параметра функции, как предполагает ошибка?
Это потому, что тип auto
определяется значением r * , которое компилятор не может вывести, несмотря на то, что он является предикатом алгоритма, выполняемого для известного вектора int
?
Кто-нибудь знает причину?