I have a simple library which uses another library. 

Here is the header:

    #ifndef __DERIVEDCLASS_H__
    #define __DERIVEDCLASS_H__
    
    #include <HardwareSerial.h>
    
    class DerivedClass
    {
    private:
    	HardwareSerial* serial;
    
    public:
    	DerivedClass();
    };
    #endif

And the CPP:

    #include "DerivedClass.h"
    
    DerivedClass::DerivedClass()
    {
    
    }

And the sketch:

    #include <DerivedClass.h>
    
    void setup()
    {
    }
    
    void loop()
    {
    }

This works fine.

However, if I change the library header to this:

    #ifndef __DERIVEDCLASS_H__
    #define __DERIVEDCLASS_H__
    
    #include <SoftwareSerial.h>
    
    class DerivedClass
    {
    private:
    	SoftwareSerial* serial;
    
    public:
    	DerivedClass();
    };
    #endif

The sketch fails to compile:

> /Users/andrew/Documents/Arduino/libraries/DerivedClass/DerivedClass.h:9:
> error: ISO C++ forbids declaration of 'SoftwareSerial' with no type
> /Users/andrew/Documents/Arduino/libraries/DerivedClass/DerivedClass.h:9:
> error: expected ';' before '*' token

Why is this? HardwareSerial is a built-in part of the Arduino, located in *hardware/arduino/cores/arduino* and SoftwareSerial is in *libraries*, but why would the build process differentiate between the two.