Я пытаюсь понять, как объявить концепцию, которая требует определенного оператора, перегружена для данного типа. Допустим, у меня есть следующая функция, которая принимает вектор произвольного типа и печатает его в std::cout
:
template<typename printable>
void print_vector(const std::vector<printable>& vec)
{
std::cout << '{';
for (const printable &item : vec) {
std::cout << item << ',';
}
std::cout << '}';
}
Этот код будет работать нормально, если тип printable
имеет перегруженный <<
оператор, но если это не так, то он завершается неудачно с очень бесполезной ошибкой компилятора. Я чувствую, что должен иметь возможность каким-то образом объявить концепцию, которая требует, чтобы тип имел действительный оператор <<
, и использовать эту концепцию в объявлении функции, чтобы получить более полезную ошибку компилятора, но я не смог понять, как это сделать.