Well, you could create your template reading something like this:
template
class ObservableList {
std::list<T> contained_data;
};
This will however make the restriction implicit, plus you can't just supply anything that looks like a list. There are other ways to restrict the container types used, for example by making use of specific iterator types that do not exist in all containers but again this is more an implicit than an explicit restriction.
To the best of my knowledge a construct that would mirror the statement Java statement to its full extent does not exist in current standard.
There are ways to restrict the types you can use inside a template you write by using specific typedefs inside your template. This will ensure that the compilation of the template specialisation for a type that does not include that particular typedef will fail, so you can selectively support/not support certain types.
In C++0x, the introduction of concepts should make this easier but I don't think it'll do exactly what you'd want either.