2012-11-06 4 views
6

Come specificare una funzione predefinita come parametro di un membro della classe?Errore GCC o non: default std :: function?

Un esempio attuale deriva dal mio codice è:

#include <iostream> 
#include <functional> 

template<typename T> struct C 
{ 
    static T test(std::function<T(int)> f = [](int i){return i;}) 
    {return f(42);} 
}; 

int main(int argc, char* argv[]) 
{ 
    C<int>::test(); // ERROR = internal compiler error : in tsubst_copy, at cp/pt.c:11354 
    C<int>::test([](int i){return i;}); // OK 
    return 0; 
} 

si tratta di un bug di GCC?

È possibile evitare questo problema con un'altra sintassi?

Potete provarlo su altri compilatori C++ 11 (per le persone che ne hanno uno)?

+13

un errore interno del compilatore è sempre un bug nel compilatore. –

+2

'Puoi provarlo su altri compilatori C++ 11 (per le persone che ne hanno uno)? 'Lo fai! –

+2

Potrebbe essere lo stesso di: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53486 –

risposta

5

Senza dubbio, questo è un bug del compilatore. Indipendentemente dal fatto che il vostro programma sia ben formato, il compilatore ha rilevato un'incoerenza nelle proprie strutture dati.

Si prega di seguire le istruzioni di segnalazione bug-GCC: http://gcc.gnu.org/bugs/#report

+0

Ok, il bug è stato segnalato. Grazie ! – Vincent