C++ のラムダ式で [=] した場合、使用されなければコピーされない

ラムダ式のキャプチャで [=] を使用すると全てのローカル変数をコピーしてキャプチャ出来るんですが、ラムダ内で使用されなかった変数はコピーされません。

[ソース]

#include <iostream>


struct X{
    X(){
        std::cout << "X::X()" << std::endl;
    }
    X(X const&){
        std::cout << "X::X(X const&)" << std::endl;
    }

    ~X(){
        std::cout << "X::~X()" << std::endl;
    }
    
    X const&
    operator =(X const&){
        std::cout << "operator =(X const)" << std::endl;
        return *this;
    }

    int value = 42;
};

int
main(){
    X x;
    int n = 7;

    [=](){
        std::cout << n << std::endl;
    }();

    std::cout <<  "--- copy X ---" << std::endl;

    [=](){
        int n = x.value;
        std::cout << n << std::endl;
    }();

    return 0;
}

[出力]

X::X()
7
--- copy ---
X::X(X const&)
X::~X()
42
X::~X()