2016-05-03 24 views
5

ho C++ 14 abilitati nel codice (un progetto QT5) simile al seguente:compilatore si blocca su lambda generico

auto func = [&](auto p, auto pp) { 
    if(!p) 
     return; 
    pp = p; 
    p->init(); 
    this->member_function(pp->thing()); // replaces member_function(pp->thing()); 
}; 
MyClass *p1; 
... 
func(p1, m_p); 
m_p->doSomething(); 

Dopo aver ricevuto:

internal compiler error: Segmentation fault 

Debug ho trovato m_p no cambiare dopo la chiamata a func, come mi aspettavo. Il lambda generico (auto) funziona davvero così? Come vado a cambiare m_p in codice come sopra?

+0

Ho problemi ad analizzare il titolo e il problema con la funzione lingua. Il "Modello generico" ha un altro nome? O si tratta di un problema con variabili Auto-tipizzate, detrazione di tipo Return o Lambdas? Vedi anche [Supporto standard C++ in GCC] (http://gcc.gnu.org/projects/cxx-status.html). – jww

+0

È meglio ora? – KcFnMi

+0

Talvolta gli errori di compilazione generano errori di compilazione. Forse altre parti del codice (ad es. DoSomething()) generano un errore di compilazione e questo a sua volta espone un bug nel compilatore. Prova altri compilatori o scopri cosa c'è di sbagliato nel tuo codice (senza l'aiuto del compilatore). Per cominciare, rimuovi la caputura '&' nella lambda in quanto non è necessario. – alfC

risposta

6

L'errore di segmentazione nel compilatore è molto negativo, ma hai provato a utilizzare auto& pp? Sembra che m_p venga passato per valore, non per riferimento.

7

Segnala un bug nel bugzilla di gcc. Se il tuo codice è C++ valido o no, il compilatore non dovrebbe saltare in aria con un errore di segmentazione.

+0

Posso chiederti di essere un po 'più prolisso? – KcFnMi

+5

Sei perfettamente libero di chiedermi di essere più prolisso. Ma non c'è nient'altro da dire: congratulazioni, hai trovato un bug in gcc. Per il tuo premio, ricevi un bug report completamente gratuito in bugzilla di gcc! –

+0

Cosa ti fa pensare che l'OP stia utilizzando GCC? – emlai