Forward declare a standard container?

c++, header, std

Solution

Declaring `vector` in the `std` namespace is undefined behavior. So, your code might work, but it also might not, and the compiler is under no obligation to tell you when your attempt won't work. That's a gamble, and I don't know that avoiding the inclusion of a standard C++ header is worth that.

See the following comp.std.c++.moderated discussion:

forward declaring std::vector. Works, but is it legal and standard compliant?

Problem

Is it possible to forward declare an standard container in a header file? For example, take the following code: ``` #include <vector> class Foo { private: std::vector<int> container_; ... }; ``` I want to be able to do something like this: ``` namespace std { template <typename T> class vector; } class Foo { private: std::vector<int> container_; ... }; ``` Can this be done?

Original source