Ежедневный бит(e) C++ #260, заголовок ‹iosfwd›.

Включение заголовка ‹iostream>< может существенно повлиять на время компиляции, поскольку это один из тяжелых стандартных заголовков C++.

В качестве альтернативы, особенно для заголовков библиотек, заголовок ‹iosfwd>< предоставляет только предварительное объявление, что делает его по существу бесплатным.

Поскольку нам нужно объявить только функции вставки и извлечения потока, заголовка ‹iosfwd>< будет достаточно.

// Sufficient for declarations
#include <iosfwd>

struct X {
    // Declare stream insertion
    friend std::ostream& operator<<(std::ostream&, const X&);
    // Declare stream extraction
    friend std::istream& operator>>(std::istream&, X&);
    int x;
};

// Required for definitions
#include <iostream>

// Implement stream insertion
std::ostream& operator<<(std::ostream& s, const X& x) {
    return s << x.x;
}
// Implement stream extraction
std::istream& operator>>(std::istream& s, X& x) {
    return s >> x.x;
}

Откройте пример в Compiler Explorer.