c++ concept is predicates, but existential type is usually functions table.
Indeed, predicated can represent that we have a function, but normally predicate is opaque, so we only know we have a function, but we don't know what the function is, we cannot get function from predicate directly.
That's why c++ concept can hardly support type erasure (rust: trait -> dyn trait, swift: protocol -> any protocol), so c++ concept is not really existential type.