Question: I was wondering if there as a way to know if an object is an instance of a case class. I was trying to find some structural type matching `unapply`, I notice they inherit `Product`. My real need for a function that would go something like:

```
def withCaseClass[T <: /* matcher for case class */](obj:T) ...

```

My major interest is to make sure only case classes can be passed to this function.

Answer: 
A `case class` is an implementation detail. One can create a class that acts exactly like a case class -- and the ability to do so is a very important thing, as it ensures one *can* switch to a normal class if some particular requirement makes that a better choice.
As you can do exactly the same "manually" what the compiler does for case classes, and because the produced byte-code would be indistinguishable (is this even a word? looks funny...), you are out of luck. The real question is: Why should you care about?