Hi Christophe,
There is no built-in mechanism for this. Instead, you have to build this into your interface.
Note that a `Client` object can be "safely" cast to any type using `client.castAs<SomeInterfaceType>()`. I say "safely" meaning: you won't violate C++ memory safety by this cast, even if the server doesn't actually implement the type. Instead, if you cast to the wrong type, method calls on that type will fail with UNIMPLEMENTED exceptions. The exception is produced on the server side; the client side does not actually know the destination type so cannot predict whether the method is supported.
To that end, one way to query the type would be to simply try to call a method on `ConcreteA` or `ConcreteB` and see if it fails with `exception.getType() == kj::Exception::Type::UNIMPLEMENTED`.
But if you'd like to avoid the round trip, then I would suggest that `getAbstracts()` should return a list that contains not just the interface pointers, but also associated metadata identifying what type it is.
-Kenton