title: Using forward declarations for built in datatypes
body: <p>I understand that wherever possible we shall use forward declarations instead of includes to speed up the compilation.</p>
  
  <p>I have a class <code>Person</code> like this.</p>
  
  <pre><code>#pragma once
  
  #include &lt;string&gt;
  
  class Person
  {
  public:
      Person(std::string name, int age);
      std::string GetName(void) const;
      int GetAge(void) const;
  private:
      std::string _name;
      int _age;
  };
  </code></pre>
  
  <p>and a class <code>Student</code> like this</p>
  
  <pre><code>#pragma once
  
  #include &lt;string&gt;
  
  class Person;
  
  class Student
  {
  public:
      Student(std::string name, int age, int level = 0);
      Student(const Person&amp; person);
      std::string GetName(void) const;
      int GetAge(void) const;
      int GetLevel(void) const;
  private:
      std::string _name;
      int _age;
      int _level;
  };
  </code></pre>
  
  <p>In Student.h, I have a forward declaration <code>class Person;</code> to use <code>Person</code> in my conversion constructor. Fine. But I have done <code>#include &lt;string&gt;</code> to avoid compilation error while using <code>std::string</code> in the code. How to use forward declaration here to avoid the compilation error? Is it possible?</p>
  
  <p>Thanks.</p>