>>55のC++の例は引数を束縛する名前がなく構造的型付けで静的ダックタイピングだけど
conceptを定義してその名前で束縛してやると名前的型付けになる

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

void print_size(const HasSize auto& object) {
cout << "size: " << object.size() << endl;
}