Forward Declaration of variables/classes in std namespace
c++, class, forward-declaration, std
Solution
You can forward declare your own classes in header files to save compilation time. But you can't for classes in namespace std. According to the C++11 standard, 17.6.4.2.1:
The behavior of a C++ program is undefined if it adds declarations or definitions to namespace std or to a namespace within namespace std unless otherwise specified.
Note that some of these classes are typedefs of class templates, so a simple forward declaration will not work. You can use `#include<iosfwd>` instead of `#include<iostream>` for example, but there are no similar headers with just forward declarations for `string`, `vector`, etc.
See GotW #34, Forward Declarations for more information.
Problem
I usually use forward declaration predominantly, if I have a class that does not need complete definition in .hpp file Ex) ``` //B.hpp namespace A_file { class A; } namespace B_file { class B { public: B(); private: A *ptr_to_A; } } //B.cpp #include "A.hpp" using namespace A_file; namespace B_file { B(int value_) { *ptr_to_A = new A(value_); } int some_func() { ptr_to_A->some_func_in_A(); } } ``` I write this kind of code. I think, it will save including the whole hpp again. (Feel free to comment, if you thing, this is not healthy) Is there a way that I can do the same for objects/classes in std namespace? If there is a way, is it okay or does it have side effects?