#include <concepts>
#include <cstddef>
#include <iostream>
#include <string>
#include <vector>

template<typename T>
concept HasSize = requires(const T& value) {
    { value.size() } -> std::convertible_to<std::size_t>;
};

template<typename T>
    requires HasSize<T>
std::size_t length(const T& value) {
    return value.size();
}

int main() {
    const std::vector<int> values{2, 4, 6};
    const std::string empty{};
    std::cout << length(values) << '\n';
    std::cout << length(empty) << '\n';
    return 0;
}
