Почему уже при создании множества, вылетает ошибка, хотя не был изменен массив?
Пример кода:
#include <bits/stdc++.h>
class B {
public:
std::array<int, 3> b;
void constFunc() const { // error
// void constFunc() { // done
std::multiset<std::reference_wrapper<int> > ms;
ms.insert(b.begin(), b.end());
}
};
int main() {
B b;
b.constFunc();
std::cout << '\n';
}
Как можно исправить ситуацию, оставляя прототип с константой и не создавая копию массива?
Так как void constFunc() const отмечен как const, для него b имеет тип const std::array<int, 3>. Значит *b.begin() (и подобные выражения) имеет тип const int.
А std::reference_wrapper<int> может ссылаться только на неконстантные intы.
Пытаться поместить ссылку на const int в std::multiset<std::reference_wrapper<int>> - это все равно что пытаться сделать что-то вроде:
const int a = 1;
int &b = a; // ошибка
Как подсказывают в комментариях, можно использовать:
std::multiset<std::reference_wrapper<const int>> ms;
Либо, если вам на самом деле не нужны ссылки, можно сделать:
std::multiset<int> ms;
Либо можно убрать const с метода.
Продвижение своими сайтами как стратегия роста и независимости