Только начал изучать библиотеку Boost Range, но не смог найти ответ в документации. Приведенный ниже код компилируется с использованием VS2017 и работает как положено (перечисленные номера с 1 по 9). Вопрос в том, считается ли реализация метода my_range безопасной? Второе выражение boost :: join использует параметр ("jr") из первого boost :: join, который выйдет из области видимости go после завершения метода. Есть ли шанс, что этот метод может вернуть недопустимый объект boost :: range :: join_range?
Оцените любой ввод: -)
struct foo
{
typedef boost::range::joined_range<
boost::range::joined_range<
std::vector<int>,
std::vector<int>>,
std::vector<int>> range;
std::vector<int> v1;
std::vector<int> v2;
std::vector<int> v3;
foo()
{
v1 = { 1,2,3 };
v2 = { 4,5,6 };
v3 = { 7,8,9 };
}
range my_range()
{
auto jr = boost::join(v1, v2); // (1)
return boost::join(jr, v3); // (2)
}
};
int main()
{
foo f1;
for (auto item : f1.my_range())
std::cout << item << " ";
return 0;
}