2016-01-04 15 views
7

Ogni lambda dovrebbe avere un tipo sconosciuto unico .. è garantito che due lambda nello stesso ambito hanno tipi diversi?I lambda hanno tipi diversi?

int main() { 
    auto l1 = [](){}; 
    auto l2 = [](){}; 
    static_assert(std::is_same<decltype(l1), decltype(l2)>::value == false, "Types cannot be equal!"); 
} 

Questo funziona ma mi piacerebbe sapere se è garantito che l'asserzione non verrà mai attivata.

risposta

12

Sì, ogni espressione lambda produce un tipo unico ([expr.prim.lambda]/3):

Il tipo di lambda-espressione (che è anche il tipo di oggetto di chiusura) è a univoco, tipo di classe non associata senza nome, detto tipo di chiusura, le cui proprietà sono descritte di seguito.

[enfasi aggiunta]

+1

Qualche possibilità si potrebbe aggiungere un link alla fonte della citazione per completezza, dato che la citazione si conclude "Come descritto di seguito"? –

+3

@IStanley: Il '[expr.prim.lambda]/3' è un'attribuzione (indica una sezione nello standard C++). –

+0

impari qualcosa di nuovo ogni giorno! Grazie. –

Problemi correlati