Entendendo como o tipo de fechamento Lambda excluiu o construtor padrão

From 5.1.2

[19] O tipo de fechamento associado a uma expressão lambdapossui um construtor padrão excluído (8.4.3) e um operador de atribuição de cópia excluída. Ele possui um construtor de cópias declarado implicitamente (12.8) e pode ter um construtor de movimentação declarado implicitamente (12.8). [Nota: O construtor de copiar / mover é definido implicitamente da mesma maneira que qualquer outro construtor de copiar / mover declarado implicitamente seria definido implicitamente. - end note]

Estou lendo o C ++ Primer 14.8.1, que explica expressões lambda sendo traduzidas pelo compilador em um objeto sem nome de uma classe sem nome. Como é que posso definir objetos de funções lambda que não contêm uma captura lambda, se o construtor padrão for excluído?

 auto g = [](){};

Isso não é conceitualmente o mesmo que ...

 class lambdaClass{
 public:
      lambdaClass() = delete;
      lambdaClass& operator=(const lambdaClass&) = delete;
      void operator()(){ }

      //copy/move constructor and destructor implicitly defined
};

auto g = lambdaClass(); //would be an error since default is deleted.

Se houve uma captura, um construtorde outros do que o construtor padrão seria definido e seria bom inicializar objetos desse tipo (desde que um parâmetro fosse passado). Mas se não houver captura e o construtor padrão for excluído, não parece consistente conceitualmente que um objeto de classe lambda possa ser criado.

Edit: Hmm, talvez a concepção de que a classe lambda crie construtores dependendo de suas capturas lambda seja infundada, apesar de ser como é descrito no C ++ Primer (não consigo encontrar nenhuma citação disso no padrão), porque o código a seguir não funciona mesmo embora eu esperasse que conceitualmente:

int sz = 2;
auto a = [sz](){ return sz;};
decltype(a) b(10); //compiler error
decltype(a) b = a; //all good though

questionAnswers(1)

yourAnswerToTheQuestion