#include <algorithm>
#include <iostream>
#include <stdexcept>
#include <vector>

void replace(std::vector<int>& current, std::vector<int> candidate) {
    if (std::any_of(candidate.begin(), candidate.end(),
                    [](int value) { return value < 0; })) {
        throw std::invalid_argument{"negative"};
    }
    current.swap(candidate);
}

int main() {
    std::vector<int> current{1, 2};
    try {
        replace(current, std::vector<int>{3, -1});
    } catch (const std::invalid_argument& error) {
        std::cout << "caught " << error.what() << '\n';
    }
    std::cout << current[0] << ' ' << current[1] << '\n';
    replace(current, std::vector<int>{4, 5});
    std::cout << current[0] << ' ' << current[1] << '\n';
}
