Genera il messaggio di errore più lungo in C ++


89

Scrivere un breve programma, che avrebbe generato il messaggio di errore più lunga possibile, in un compilatore standard C ++ ( gcc, cl.exe, icc, o clang).

Il punteggio di ciascuna voce è il numero di caratteri nel messaggio di errore più lungo emesso dal compilatore. I tipi inclusi nel codice sorgente e citati dal compilatore vengono conteggiati come un singolo carattere.

Imbrogliare

Puoi sempre ridefinire un modello in modello in modello con nomi lunghi, ma mi aspetto qualcosa di creativo. Ho cercato di impedirne un po 'con l'ultima regola, ma ovviamente le regole possono essere migliori e sarò felice per i miglioramenti.


3
Modificato i tag. Ammetto che [kolmogorov-complessità] è un po 'allungato , ma penso che sia espressivo in questo caso.
dmckee,

23
Forse si dovrebbe andare per un rapporto: Error.message.length / code.length.
utente sconosciuto

Risposte:


52

I messaggi di errore del modello sono divertenti da decifrare. Considera questo:

#include <vector>
#include <algorithm>
int main()
{
    int a;
    std::vector< std::vector <int> > v;
    std::vector< std::vector <int> >::const_iterator it = std::find( v.begin(), v.end(), a );
}

La compilazione con gcc -c error.cpp(4.6.3) produrrà 15786 byte di output, con una riga più lunga di 330 caratteri.

Nel file incluso da /usr/include/c++/4.6/algorithm:63:0,
                 da error_code.cpp: 2:
/usr/include/c++/4.6/bits/stl_algo.h: nella funzione '_RandomAccessIterator std :: __ find (_RandomAccessIterator, _RandomAccessIterator, const _Tp &, std :: random_access_iterator_tag) ___ _xx) >>, _Tp = int] ':
/usr/include/c++/4.6/bits/stl_algo.h:4403:45: istanziato da '_IIter std :: find (_IIter, _IIter, const _Tp &) [con _IIter = __gnu_cxx :: __ normal_iterator *, std :: vector> >, _Tp = int] '
error_code.cpp: 8: 89: istanziato da qui
/usr/include/c++/4.6/bits/stl_algo.h:162:4: errore: nessuna corrispondenza per 'operator ==' in '__first .__ gnu_cxx :: __ normal_iterator :: operator * [con _Iterator = std :: vector * , _Container = std :: vector>, __gnu_cxx :: __ normal_iterator :: reference = std :: vector &] () == __val '
/usr/include/c++/4.6/bits/stl_algo.h:162:4: nota: i candidati sono:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: nota: template bool std :: operator == (const std :: pair &, const std :: pair &)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: nota: template bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: nota: template bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/allocator.h:122:5: nota: template bool std :: operator == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/allocator.h:127:5: nota: template bool std :: operator == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: nota: template bool std :: operator == (const std :: vector &, const std :: vector &)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx :: operator == (const __gnu_cxx :: new_allocator &, const __gnu_cxx :: new_allocator &)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: nota: template bool __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: nota: template bool __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_algo.h:4403:45: istanziato da '_IIter std :: find (_IIter, _IIter, const _Tp &) [con _IIter = __gnu_cxx :: __ normal_iterator *, std :: vector> >, _Tp = int] '
error_code.cpp: 8: 89: istanziato da qui
/usr/include/c++/4.6/bits/stl_algo.h:166:4: errore: nessuna corrispondenza per 'operator ==' in '__first .__ gnu_cxx :: __ normal_iterator :: operator * [con _Iterator = std :: vector * , _Container = std :: vector>, __gnu_cxx :: __ normal_iterator :: reference = std :: vector &] () == __val '
/usr/include/c++/4.6/bits/stl_algo.h:166:4: nota: i candidati sono:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: nota: template bool std :: operator == (const std :: pair &, const std :: pair &)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: nota: template bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: nota: template bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/allocator.h:122:5: nota: template bool std :: operator == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/allocator.h:127:5: nota: template bool std :: operator == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: nota: template bool std :: operator == (const std :: vector &, const std :: vector &)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx :: operator == (const __gnu_cxx :: new_allocator &, const __gnu_cxx :: new_allocator &)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: nota: template bool __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: nota: template bool __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_algo.h:170:4: errore: nessuna corrispondenza per 'operator ==' in '__first .__ gnu_cxx :: __ normal_iterator :: operator * [con _Iterator = std :: vector * , _Container = std :: vector>, __gnu_cxx :: __ normal_iterator :: reference = std :: vector &] () == __val '
/usr/include/c++/4.6/bits/stl_algo.h:170:4: nota: i candidati sono:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: nota: template bool std :: operator == (const std :: pair &, const std :: pair &)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: nota: template bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: nota: template bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/allocator.h:122:5: nota: template bool std :: operator == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/allocator.h:127:5: nota: template bool std :: operator == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: nota: template bool std :: operator == (const std :: vector &, const std :: vector &)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx :: operator == (const __gnu_cxx :: new_allocator &, const __gnu_cxx :: new_allocator &)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: nota: template bool __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: nota: template bool __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_algo.h:174:4: errore: nessuna corrispondenza per 'operator ==' in '__first .__ gnu_cxx :: __ normal_iterator :: operator * [con _Iterator = std :: vector * , _Container = std :: vector>, __gnu_cxx :: __ normal_iterator :: reference = std :: vector &] () == __val '
/usr/include/c++/4.6/bits/stl_algo.h:174:4: nota: i candidati sono:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: nota: template bool std :: operator == (const std :: pair &, const std :: pair &)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: nota: template bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: nota: template bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/allocator.h:122:5: nota: template bool std :: operator == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/allocator.h:127:5: nota: template bool std :: operator == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: nota: template bool std :: operator == (const std :: vector &, const std :: vector &)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx :: operator == (const __gnu_cxx :: new_allocator &, const __gnu_cxx :: new_allocator &)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: nota: template bool __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: nota: template bool __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_algo.h:182:4: errore: nessuna corrispondenza per 'operator ==' in '__first .__ gnu_cxx :: __ normal_iterator :: operator * [con _Iterator = std :: vector * , _Container = std :: vector>, __gnu_cxx :: __ normal_iterator :: reference = std :: vector &] () == __val '
/usr/include/c++/4.6/bits/stl_algo.h:182:4: nota: i candidati sono:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: nota: template bool std :: operator == (const std :: pair &, const std :: pair &)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: nota: template bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: nota: template bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/allocator.h:122:5: nota: template bool std :: operator == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/allocator.h:127:5: nota: template bool std :: operator == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: nota: template bool std :: operator == (const std :: vector &, const std :: vector &)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx :: operator == (const __gnu_cxx :: new_allocator &, const __gnu_cxx :: new_allocator &)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: nota: template bool __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: nota: template bool __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_algo.h:186:4: errore: nessuna corrispondenza per 'operator ==' in '__first .__ gnu_cxx :: __ normal_iterator :: operator * [con _Iterator = std :: vector * , _Container = std :: vector>, __gnu_cxx :: __ normal_iterator :: reference = std :: vector &] () == __val '
/usr/include/c++/4.6/bits/stl_algo.h:186:4: nota: i candidati sono:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: nota: template bool std :: operator == (const std :: pair &, const std :: pair &)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: nota: template bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: nota: template bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/allocator.h:122:5: nota: template bool std :: operator == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/allocator.h:127:5: nota: template bool std :: operator == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: nota: template bool std :: operator == (const std :: vector &, const std :: vector &)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx :: operator == (const __gnu_cxx :: new_allocator &, const __gnu_cxx :: new_allocator &)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: nota: template bool __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: nota: template bool __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_algo.h:190:4: errore: nessuna corrispondenza per 'operator ==' in '__first .__ gnu_cxx :: __ normal_iterator :: operator * [con _Iterator = std :: vector * , _Container = std :: vector>, __gnu_cxx :: __ normal_iterator :: reference = std :: vector &] () == __val '
/usr/include/c++/4.6/bits/stl_algo.h:190:4: nota: i candidati sono:
/usr/include/c++/4.6/bits/stl_pair.h:201:5: nota: template bool std :: operator == (const std :: pair &, const std :: pair &)
/usr/include/c++/4.6/bits/stl_iterator.h:285:5: nota: template bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:335:5: nota: template bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/allocator.h:122:5: nota: template bool std :: operator == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/allocator.h:127:5: nota: template bool std :: operator == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/stl_vector.h:1273:5: nota: template bool std :: operator == (const std :: vector &, const std :: vector &)
/usr/include/c++/4.6/ext/new_allocator.h:123:5: note: template bool __gnu_cxx :: operator == (const __gnu_cxx :: new_allocator &, const __gnu_cxx :: new_allocator &)
/usr/include/c++/4.6/bits/stl_iterator.h:805:5: nota: template bool __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:799:5: nota: template bool __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)

Modifica 29/04/2016: gcc 5.3.0 ha ottenuto risultati leggermente migliori: solo 9300 byte, la riga più lunga è lunga 361 caratteri ...

Modifica 04-04-2019: gcc 6.5.0: 11237 byte, ma fornisce alcuni suggerimenti sull'errore, come in queste righe:

error.cpp: 7: 92: richiesto da qui
/usr/include/c++/6/bits/predefined_ops.h:199:17: errore: nessuna corrispondenza per 'operator ==' (i tipi di operando sono 'std :: vector' e 'const int')
  {return * __ it == _M_value; }
           ~~~~~~ ^ ~~~~~~~~~~

120

19 caratteri

Crea un file a.cppcon questo contenuto:

#include __FILE__
p;

Compila come:

g++ a.cpp

e ricevi incredibili messaggi di errore di 21300 linee :

In file included from a.cpp:1:0,
                 from a.cpp:1,
                 from a.cpp:1,
                 from a.cpp:1,

...

... 21280 righe di errore ...
...

In file included from a.cpp:1:0,
                 from a.cpp:1,
                 from a.cpp:1,
                 from a.cpp:1,
                 from a.cpp:1:
a.cpp:2:1: error: ‘p’ does not name a type
In file included from a.cpp:1:0,
                 from a.cpp:1,
                 from a.cpp:1,
                 from a.cpp:1:
a.cpp:2:1: error: ‘p’ does not name a type
In file included from a.cpp:1:0,
                 from a.cpp:1,
                 from a.cpp:1:
a.cpp:2:1: error: ‘p’ does not name a type
In file included from a.cpp:1:0,
                 from a.cpp:1:
a.cpp:2:1: error: ‘p’ does not name a type
In file included from a.cpp:1:0:
a.cpp:2:1: error: ‘p’ does not name a type
a.cpp:2:1: error: ‘p’ does not name a type

8
+1. Il preferito dal giudice. Non ho pensato a questo particolare abuso.
Elazar Leibovich,

1
Hm. Che dire di #include __FILE__un nome file molto lungo ..?
AKX

1
@Rob include sempre lo stesso file e ridefinisce main ogni volta.
BЈовић,

4
Votazione perché non ci sono modelli noiosi :)
kiwixz

2
Sul mio computer Windows, Clang produce output ancora più lunghi, fino a 8 MB (!!!) quando compilato clang++ -ferrorlimit=1000 a.cpp. La linea più lunga è lunga 466 caratteri.
bwDraco,

48

98 caratteri (necessari):

template<class T>struct W{T v;W(T v):v(v){}};
template<class T>int f(T x){f(W<T>(x));}
main(){f(0);}

Produce il seguente errore in GCC (4.4.5):

golf.cpp: In function ‘int f(T) [with T = W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<int> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >]’:
golf.cpp:2: error: template instantiation depth exceeds maximum of 500 (use -ftemplate-depth-NN to increase the maximum) instantiating ‘struct W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<int> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >’
golf.cpp:2:   instantiated from ‘int f(T) [with T = W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<int> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >]’
golf.cpp:2:   instantiated from ‘int f(T) [with T = W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<int> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >]’

... snip ...

golf.cpp:2:   instantiated from ‘int f(T) [with T = W<W<W<W<W<W<W<W<W<W<W<W<int> > > > > > > > > > > >]’
golf.cpp:2:   instantiated from ‘int f(T) [with T = W<W<W<W<W<W<W<W<W<W<W<int> > > > > > > > > > >]’
golf.cpp:2:   instantiated from ‘int f(T) [with T = W<W<W<W<W<W<W<W<W<W<int> > > > > > > > > >]’
golf.cpp:2:   instantiated from ‘int f(T) [with T = W<W<W<W<W<W<W<W<W<int> > > > > > > > >]’
golf.cpp:2:   instantiated from ‘int f(T) [with T = W<W<W<W<W<W<W<W<int> > > > > > > >]’
golf.cpp:2:   instantiated from ‘int f(T) [with T = W<W<W<W<W<W<W<int> > > > > > >]’
golf.cpp:2:   instantiated from ‘int f(T) [with T = W<W<W<W<W<W<int> > > > > >]’
golf.cpp:2:   instantiated from ‘int f(T) [with T = W<W<W<W<W<int> > > > >]’
golf.cpp:2:   instantiated from ‘int f(T) [with T = W<W<W<W<int> > > >]’
golf.cpp:2:   instantiated from ‘int f(T) [with T = W<W<W<int> > >]’
golf.cpp:2:   instantiated from ‘int f(T) [with T = W<W<int> >]’
golf.cpp:2:   instantiated from ‘int f(T) [with T = W<int>]’
golf.cpp:2:   instantiated from ‘int f(T) [with T = int]’
golf.cpp:3:   instantiated from here

golf.cpp:2: error: invalid use of incomplete type ‘struct W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<int> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >’
golf.cpp:1: error: declaration of ‘struct W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<W<int> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >’

Statistiche:

$ g++ golf.cpp 2>&1 | wc -c
537854
$ clang golf.cpp 2>&1 | wc -c
22666
$ g++ -ftemplate-depth-10000 golf.cpp 2>&1 | wc -c # 268+ MB of RAM and almost 15 minutes
200750356

Ungolfed (produce output più lungo):

template<class T>
struct Wrap {
    T value;
    Wrap(T v) : value(v) {}
};

template<class T>
void func(T x)
{
    func(Wrap<T>(x));
}

int main(void)
{
    func(0);
    return 0;
}

L'ho scoperto quando volevo vedere se il C ++ supporta la ricorsione polimorfica (e, come puoi vedere chiaramente, non lo fa). Ecco un esempio banale di ricorsione polimorfica in Haskell:

Prelude> let f :: (Show a) => a -> String; f x = show x ++ " " ++ f [x]
Prelude> f 0
"0 [0] [[0]] [[[0]]] [[[[0]]]] [[[[[0]]]]] [[[[[[0]]]]]] [[[[[[[0]]]]]]] [[[[[[[[0]] ...

Ecco, questo richiede Haskell di agire come se fosse un'istanza Show x, Show [x], Show [[x]], Show [[[x]]], all'infinito. Haskell lo fa trasformando (Show x) =>in un parametro implicito la funzione faggiunta dal compilatore, qualcosa del genere:

type Show a = a -> String

showList :: Show a -> [a] -> String
showList show []     = "[]"
showList show (x:xs) = '[' : show x ++ showItems xs where
    showItems []     = "]"
    showItems (x:xs) = ',' : show x ++ showItems xs

f :: Show a -> a -> String
f show x = show x ++ " " ++ f (showList show) [x]

C ++ lo fa cercando letteralmente di costruire tali istanze fino a quando non viene superata la profondità di istanza del modello.


6
Gonfiato a 102 byte ( clnon piace implicito intin modalità C ++) genera 14.380.923 byte di output dell'errore dopo 4 minuti e mezzo di CPU e un picco di circa 100 MiB di utilizzo della memoria.
Joey,

Potresti spiegare cosa hai cercato di ottenere con la ricorsione polimorfica? Perché in un esempio sia in Haskell che in C ++ il processo è infinito, l'unica differenza è che si verifica in fase di esecuzione o compilazione.
sukhmel,

@sukhmel No, perché Haskell è pigro, verrà compilato ed eseguito (come da demo)
cat

@cat Non ho sottinteso che non funzionerà, ho sottolineato che una tale corsa non si fermerà mai, o no? Althoug suppongo che in ciò che Joey ha cercato di raggiungere ci sarebbe dovuto essere una condizione di arresto in caso di un modello specifico, ecco perché mi chiedevo quale fosse l'idea alla base della ricorsione polimorfica.
sukhmel,

41

Basato su un rapporto lunghezza messaggio / lunghezza codice, questa potrebbe essere la soluzione migliore:

Messaggio (81):

code: file not recognized: File truncated  
collect2: ld returned 1 exit status  

81/0 = Inf


13
+1 Modo intelligente, miglior rapporto! Ma non più messaggio ...
Synxis,

1
Il messaggio è in realtà 81 byte. Non che importa, ma solo un FYI
caird coinheringaahing il

37

279 caratteri

#define A(s) s##s##s##s##s##s##s##s
#define B(s) A(s##s##s##s##s##s##s##s)
#define C(s) B(s##s##s##s##s##s##s##s)
#define D(s) C(s##s##s##s##s##s##s##s)
#define E(s) D(s##s##s##s##s##s##s##s)
#define F(s) E(s##s##s##s##s##s##s##s)
#define G(s) F(s##s##s##s##s##s##s##s)
a G(foo)

Con gcc 4.2.1, genera l'errore error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘foofoo....foofoo’con 2 ^ 21 copie di foo. 6.291.558 byte in tutto. È un identificatore il più grande possibile, sostituendolo foocon foodgenera un GHIACCIO.


19
Segfault gcc 4.4.5. Vincere!
Joey Adams,

8
@JoeyAdams: segnalalo come un bug di
the_drow,

9
@the_drow È una funzionalità.
Mateen Ulhaq,

1
@muntoo: come mai? Un ICE non è mai una buona idea.
the_drow

2
Un modello come questo ti porterà oltre: #define A(s) s##s##s##s #define B(s) A(s) #define C(s) B(B(B(s))) #define D(s) C(C(C(s))) D(foo). Questo mi dà un messaggio di errore per quanto tempo con molto meno codice e cresce molto più velocemente con l'aumento del pattern in qualsiasi dimensione, poiché stiamo essenzialmente implementando la funzione Ackermann.
David Stone,

24

Simile a VJo:
a.cpp:

int main() { return  
#include "a.cpp"  
#include "a.cpp"  
}

g ++ a.cpp

produce un sacco di output (almeno 2 gigabyte prima che lo uccidessi)


22

Il seguente codice si basa su un errore effettivo che ho riscontrato una volta.

template <int i>
void bar();

template <int i>
void foo()
{
    bar<i>();
    char baz[i];
}

template <int i>
void bar()
{
    foo<i-1>();
}


int main(void)
{
    foo<2000>();

    return 0;
}

(usando gcc)

Ricorsione del modello abbastanza ovvia, ma dal momento che ho usato ftemplate-depth=100000per questa corsa questo non produce un errore. La vera fonte dei messaggi di errore proviene char baz[i];, che produce un errore quando iscende a -1.

Dopo circa mezz'ora, sono seduto su 21.000 errori del compilatore , 300.000 righe di messaggi di errore e 280 megabyte di RAM utilizzati dal compilatore. E non mostra segni di arresto.

MODIFICARE:

Un'ora dopo, ora con 36.000 errori del compilatore , 504.000 righe di messaggi di errore e 480 megabyte di RAM ... e ancora attivi.

EDIT # 2:

Circa mezz'ora dopo:

ccplus1.exe has stopped working

Statistiche finali: 38.876 errori del compilatore , 544.624 righe di messaggi di errore, per un totale di 48,8 megabyte di dati e 518,9 megabyte di RAM utilizzati dal compilatore prima che si arrestasse in modo anomalo.


2
Sono sicuro che nessuno di questi messaggi di errore indica nemmeno il vero problema ... che è tipico del refuso STL medio.
Mark Lakata,

21

28 byte

Sabotaggio della libreria standard:

#define std +
#include<map>

Utilizzando clang su OS X 10.9:

c++ foo.cpp -o foo -ferror-limit=-1
In file included from foo.cpp:2:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:422:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__config:347:11: error: expected identifier or '{'
namespace std {
          ^
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
In file included from foo.cpp:2:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:422:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__config:347:11: error: expected external declaration
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
In file included from foo.cpp:2:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:422:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__config:347:15: error: expected unqualified-id
namespace std {
              ^
In file included from foo.cpp:2:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:423:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:15:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iterator:330:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/type_traits:203:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/cstddef:50:1: error: expected identifier or '{'
_LIBCPP_BEGIN_NAMESPACE_STD
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__config:343:47: note: expanded from macro '_LIBCPP_BEGIN_NAMESPACE_STD'
#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE {
                                              ^
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
In file included from foo.cpp:2:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:423:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:15:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iterator:330:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/type_traits:203:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/cstddef:50:1: error: expected external declaration
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__config:343:47: note: expanded from macro '_LIBCPP_BEGIN_NAMESPACE_STD'
#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE {
                                              ^
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
In file included from foo.cpp:2:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:423:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:15:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iterator:330:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/type_traits:203:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/cstddef:50:1: error: expected unqualified-id

[[SNIP...]]

_LIBCPP_NEW_DELETE_VIS void* operator new(std::size_t __sz)
                             ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:132:43: error: expected parameter declarator
_LIBCPP_NEW_DELETE_VIS void* operator new(std::size_t __sz, const std::nothrow_t&) _NOEXCEPT _NOALIAS;
                                          ^
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
In file included from foo.cpp:2:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:423:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:16:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/memory:597:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:132:43: error: expected ')'
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:132:42: note: to match this '('
_LIBCPP_NEW_DELETE_VIS void* operator new(std::size_t __sz, const std::nothrow_t&) _NOEXCEPT _NOALIAS;
                                         ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:134:63: error: C++ requires a type specifier for all declarations
_LIBCPP_NEW_DELETE_VIS void  operator delete(void* __p, const std::nothrow_t&) _NOEXCEPT;
                                                        ~~~~~ ^
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
In file included from foo.cpp:2:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:423:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:16:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/memory:597:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:134:63: error: expected ')'
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:134:45: note: to match this '('
_LIBCPP_NEW_DELETE_VIS void  operator delete(void* __p, const std::nothrow_t&) _NOEXCEPT;
                                            ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:136:45: error: expected parameter declarator
_LIBCPP_NEW_DELETE_VIS void* operator new[](std::size_t __sz)
                                            ^
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
In file included from foo.cpp:2:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:423:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:16:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/memory:597:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:136:45: error: expected ')'
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:136:44: note: to match this '('
_LIBCPP_NEW_DELETE_VIS void* operator new[](std::size_t __sz)
                                           ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:138:11: error: expected a type
    throw(std::bad_alloc)
          ^
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
In file included from foo.cpp:2:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:423:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:16:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/memory:597:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:138:11: error: expected ')'
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:138:10: note: to match this '('
    throw(std::bad_alloc)
         ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:136:30: error: 'operator new[]' must have at least one parameter
_LIBCPP_NEW_DELETE_VIS void* operator new[](std::size_t __sz)
                             ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:141:45: error: expected parameter declarator
_LIBCPP_NEW_DELETE_VIS void* operator new[](std::size_t __sz, const std::nothrow_t&) _NOEXCEPT _NOALIAS;
                                            ^
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
In file included from foo.cpp:2:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:423:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:16:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/memory:597:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:141:45: error: expected ')'
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:141:44: note: to match this '('
_LIBCPP_NEW_DELETE_VIS void* operator new[](std::size_t __sz, const std::nothrow_t&) _NOEXCEPT _NOALIAS;
                                           ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:143:65: error: C++ requires a type specifier for all declarations
_LIBCPP_NEW_DELETE_VIS void  operator delete[](void* __p, const std::nothrow_t&) _NOEXCEPT;
                                                          ~~~~~ ^
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
In file included from foo.cpp:2:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:423:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:16:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/memory:597:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:143:65: error: expected ')'
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:143:47: note: to match this '('
_LIBCPP_NEW_DELETE_VIS void  operator delete[](void* __p, const std::nothrow_t&) _NOEXCEPT;
                                              ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:145:55: error: expected parameter declarator
inline _LIBCPP_INLINE_VISIBILITY void* operator new  (std::size_t, void* __p) _NOEXCEPT {return __p;}
                                                      ^
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
In file included from foo.cpp:2:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/map:423:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:16:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/memory:597:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:145:55: error: expected ')'
foo.cpp:1:13: note: expanded from macro 'std'
#define std +
            ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:145:54: note: to match this '('
inline _LIBCPP_INLINE_VISIBILITY void* operator new  (std::size_t, void* __p) _NOEXCEPT {return __p;}
                                                     ^
Stack dump:
0.  Program arguments: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -cc1 -triple x86_64-apple-macosx10.9.0 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name foo.cpp -mrelocation-model pic -pic-level 2 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 236.3 -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -stdlib=libc++ -fdeprecated-macro -fdebug-compilation-dir /tmp -ferror-limit -1 -fmessage-length 203 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.9.0 -fencode-extended-block-signature -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -vectorize-slp -o /var/folders/gf/l1sssgds0b30z21wn2n4p3rm0000gr/T/foo-19eda8.o -x c++ foo.cpp 
1.  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/new:145:89: current parser token '{'
clang: error: unable to execute command: Segmentation fault: 11
clang: error: clang frontend command failed due to signal (use -v to see invocation)
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.2.0
Thread model: posix
clang: note: diagnostic msg: PLEASE submit a bug report to http://developer.apple.com/bugreporter/ and include the crash backtrace, preprocessed source, and associated run script.
clang: error: unable to execute command: Segmentation fault: 11
clang: note: diagnostic msg: Error generating preprocessed source(s).

456 righe di errori, 50 errori e un compilatore segfault !

Versione Clang:

Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.2.0
Thread model: posix

4
hai inviato una segnalazione di bug per quel segfault?
martedì

Con la mia attuale versione di LLVM (versione di Apple LLVM 8.0.0 (clang-800.0.42.1)), non ricevo più il segfault. Non sono sicuro se dovrei ancora inviare qualcosa - dubbiosi i manutentori di LLVM si preoccuperanno di un vecchio bug.
nneonneo,

10

Mi sono imbattuto in questo per caso:

#include<functional>
#include<algorithm>
#include<array>
#include<stdexcept>


int main(int argc,char** argv){
    std::array<double, 3> arr;

    arr[0] = 0; arr[1] = 1; arr[2] = 1;

    if (std::any_of(arr.begin(), arr.end(),
                    std::bind(std::less_equal<double>(), std::placeholders::_2, 0))){
        throw std::invalid_argument("Geometry with bin width less or equal to zero");
    }
}

Su c ++ x11 produce 44kb di messaggi di errore, in cui il compilatore prova a dire: Definisci segnaposto per il primo argomento se lo definisci per il secondo.

Guardalo su ideone .


6
Sono terrorizzato all'idea di scrivere un refuso in un programma C ++ che utilizza l'STL ...
Mark Lakata

+1 per una risposta che è un esempio di vita reale.
Jerry Jeremiah,

10

C ++

Basato sulla soluzione di BЈовић:

File: golf.cpp:

#include "golf.cpp"
#include "golf.cpp"

L'esecuzione in G ++ non finirà, tuttavia, ho calcolato la lunghezza dell'errore che alla fine emetterà all'incirca 85 * 2 ^ 140 terabyte.


9

Modelli variadic C ++ 11 (69 caratteri)

template<int... p>
void f()
{
    return f<0,p...>();
}

int main() {
    f();
}

Configurando la profondità massima dell'istanza del modello è possibile impostare la lunghezza dell'errore. Ecco un esempio con GCC 4.8.1 con profondità del modello predefinita (900):

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}] 'return f <0, p ...> (); ^ prog.cpp: 4: 22: richiesto ricorsivamente da 'void f () [con int ... p = {0}]' prog.cpp: 4: 22: richiesto da 'void f () [con int .. .p = {}] 'prog.cpp: 8: 4: richiesto da qui 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}] 'return f <0, p ...> () ; ^ prog.cpp: 4: 22: richiesto ricorsivamente da 'void f () [con int ... p = {0}]' prog.cpp: 4: 22: richiesto da 'void f () [con int .. .p = {}] 'prog.cpp: 8: 4: richiesto da qui 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}] 'return f <0, p ...> () ; ^ prog.cpp: 4: 22: richiesto ricorsivamente da 'void f () [con int ... p = {0}]' prog.cpp: 4: 22: richiesto da 'void f () [con int .. .p = {}] 'prog.cpp: 8: 4: richiesto da qui

prog.cpp: 4: 22: errore: nessuna funzione corrispondente per la chiamata a 'f ()' prog.cpp: 4: 22: nota: il candidato è: prog.cpp: 2: 6: nota: template void f () void f () ^ prog.cpp: 2: 6: nota: la sostituzione degli argomenti del modello dedotti ha comportato errori visti sopra prog.cpp: 4: 22: errore: istruzione return con un valore, nella funzione che restituisce 'void' [-fpermissive ] return f <0, p ...> (); ^

Inoltre, è possibile aggiungere altri dieci caratteri e utilizzare underflow intero senza segno per aumentare la lunghezza dell'errore:

template<unsigned int... p>
void f()
{
    return f<0-1,p...>();
}

int main() {
    f();
}

4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u}]' tornare f <0-1, p ...> (); ^ prog.cpp: 4: 24: richiesto ricorsivamente da 'void f () [con unsigned int ... p = {4294967295u}]' prog.cpp: 4: 24:
richiesto da 'void f () [con unsigned int ... p = {}]' prog.cpp: 8: 4:
richiesto da qui

prog.cpp: 4: 24: errore: nessuna funzione corrispondente per la chiamata a 'f ()' prog.cpp: 4: 24: nota: il candidato è: prog.cpp: 2: 6: nota: template void f () void f () ^ prog.cpp: 2: 6: nota: la sostituzione degli argomenti del modello dedotti ha provocato errori visti sopra prog.cpp: 4: 24: errore: istruzione return con un valore, nella funzione che restituisce 'void' [-fpermissive ] return f <0-1, p ...> ();

                  ^

Ecco un esempio di ideone.


6

82 byte: questo funziona in modo simile all'approccio di Joey Adams , ma il messaggio di errore aumenterà in modo esponenziale rispetto a -ftemplate-depth(perché in std::set<T>realtà è std::set<T, std::less<T>, std::allocator<T>>).

Per (x = -ftemplate-depth) >= 28, ci saranno 1460 × 3 x-27 + 269x - 5381 byte di messaggi di errore (compilati da gcc 7.2.0). Cioè, nelle impostazioni predefinite (x = 900), in teoria produrrà circa 4,9 × 10 419 byte di messaggio di errore .

Si noti che senza la returndichiarazione, i messaggi di errore verranno prodotti solo alla fine della compilazione. (quindi nelle impostazioni predefinite non riceverai i messaggi - esaurirai prima la memoria.)

Avvertenza: la compilazione di questo programma consumerà molta memoria.

#include<set>
template<class T>T f(T a){return f(std::set<T>());}int main(){f(0);}

Provalo online!


L'uso mapsembra strettamente più malvagio, poiché std::map<T,T>è std::map<T,T,std::less<T>,std::allocator<std::pair<T,T>>>così che si ottiene una ricorsione a 5 vie anziché 3, per solo 2 byte in più.
nneonneo,

Inoltre, verificato su LLVM versione 10.0.0 (clang-1000.11.45.5), senza flag aggiuntivi. Generati 148.379 byte a -ftemplate-depth=13, 423.572 byte a -ftemplate-depth=14e 1.247.322 byte a -ftemplate-depth=15. mapla variante genera 13.373.990 byte alla profondità 14 e 66.759.871 byte alla profondità 15.
nneonneo

Ad esempio, l'impostazione predefinita su Clang è -ftemplate-depth=1024, che significa da qualche parte a nord di 10 ^ 713 byte con la mapvariante. Credo che questo significhi che vinci ...
nneonneo,

4

Questo produce un output infinito su GCC 5.2 e Clang 3.6 (su Clang richiede -ferror-limit=0, su GCC funziona con le impostazioni predefinite):

#include __FILE__
#include __FILE__

2

Un file chiamato a.cpp. Codice:

main(){
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
#include "a.cpp"
}

Questa è una bomba a forcella dove n = 40.


0
  • 50 byte: il risultato sarà la somma della lunghezza di tutti i numeri positivi con un singolo messaggio di errore:

=>

#include<utility>
std::make_index_sequence<-1>::x;
  • 174 byte: esplosione quadratica con più messaggi di errore:

=>

#include<utility>
template<size_t N, size_t... M>
void a(std::index_sequence<N, M...>) {
  a(std::index_sequence<M...>{});
  static_assert(!N);
}
auto x{a(std::make_index_sequence<C>{})};

compilare con

g++ -c truc.cpp -std=c++17 -DC=10 2>&1 > /dev/null | wc -c 

index_sequence sembra aggirare il problema del limite di profondità dell'istanza del modello

  • per C = 10: 8238 caratteri
  • per C = 100: 264288 caratteri
  • per C = 1000: 23118522 caratteri

gli errori appaiono così: l'intera sequenza numerica 0 ... C-1 sembra stampata 4 * C volte

truc.cpp:7:6: error: « void x » a un type incomplet
 auto x{a(std::make_index_sequence<C>{})};
      ^
truc.cpp: Dans l'instanciation de « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] » :
truc.cpp:4:4:   requis par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 0; long unsigned int ...M = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:7:39:   requis depuis ici
truc.cpp:5:3: error: l'assertion statique a échoué
   static_assert(!N);
   ^~~~~~~~~~~~~
truc.cpp: Dans l'instanciation de « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 2; long unsigned int ...M = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] » :
truc.cpp:4:4:   requis récursivement par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:4:4:   requis par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 0; long unsigned int ...M = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:7:39:   requis depuis ici
truc.cpp:5:3: error: l'assertion statique a échoué
truc.cpp: Dans l'instanciation de « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 3; long unsigned int ...M = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] » :
truc.cpp:4:4:   requis récursivement par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:4:4:   requis par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 0; long unsigned int ...M = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:7:39:   requis depuis ici
truc.cpp:5:3: error: l'assertion statique a échoué
truc.cpp: Dans l'instanciation de « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 4; long unsigned int ...M = {5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] » :
truc.cpp:4:4:   requis récursivement par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:4:4:   requis par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 0; long unsigned int ...M = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:7:39:   requis depuis ici
truc.cpp:5:3: error: l'assertion statique a échoué
truc.cpp: Dans l'instanciation de « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 5; long unsigned int ...M = {6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>  » :
truc.cpp:4:4:   requis récursivement par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:4:4:   requis par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 0; long unsigned int ...M = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:7:39:   requis depuis ici
truc.cpp:5:3: error: l'assertion statique a échoué
truc.cpp: Dans l'instanciation de « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 6; long unsigned int ...M = {7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 6, 7, 8, 9, 10, 11, 12, 13, 14>] » :
truc.cpp:4:4:   requis récursivement par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:4:4:   requis par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 0; long unsigned int ...M = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:7:39:   requis depuis ici
truc.cpp:5:3: error: l'assertion statique a échoué
truc.cpp: Dans l'instanciation de « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 7; long unsigned int ...M = {8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 7, 8, 9, 10, 11, 12, 13, 14>] » :
truc.cpp:4:4:   requis récursivement par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:4:4:   requis par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 0; long unsigned int ...M = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:7:39:   requis depuis ici
truc.cpp:5:3: error: l'assertion statique a échoué
truc.cpp: Dans l'instanciation de « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 8; long unsigned int ...M = {9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 8, 9, 10, 11, 12, 13, 14>] » :
truc.cpp:4:4:   requis récursivement par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:4:4:   requis par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 0; long unsigned int ...M = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:7:39:   requis depuis ici
truc.cpp:5:3: error: l'assertion statique a échoué
truc.cpp: Dans l'instanciation de « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 9; long unsigned int ...M = {10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 9, 10, 11, 12, 13, 14>] » :
truc.cpp:4:4:   requis récursivement par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:4:4:   requis par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 0; long unsigned int ...M = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:7:39:   requis depuis ici
truc.cpp:5:3: error: l'assertion statique a échoué
truc.cpp: Dans l'instanciation de « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 10; long unsigned int ...M = {11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 10, 11, 12, 13, 14>] » :
truc.cpp:4:4:   requis récursivement par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:4:4:   requis par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 0; long unsigned int ...M = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:7:39:   requis depuis ici
truc.cpp:5:3: error: l'assertion statique a échoué
truc.cpp: Dans l'instanciation de « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 11; long unsigned int ...M = {12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 11, 12, 13, 14>] » :
truc.cpp:4:4:   requis récursivement par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:4:4:   requis par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 0; long unsigned int ...M = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:7:39:   requis depuis ici
truc.cpp:5:3: error: l'assertion statique a échoué
truc.cpp: Dans l'instanciation de « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 12; long unsigned int ...M = {13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 12, 13, 14>] » :
truc.cpp:4:4:   requis récursivement par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:4:4:   requis par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 0; long unsigned int ...M = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:7:39:   requis depuis ici
truc.cpp:5:3: error: l'assertion statique a échoué
truc.cpp: Dans l'instanciation de « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 13; long unsigned int ...M = {14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 13, 14>] » :
truc.cpp:4:4:   requis récursivement par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:4:4:   requis par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 0; long unsigned int ...M = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:7:39:   requis depuis ici
truc.cpp:5:3: error: l'assertion statique a échoué
truc.cpp: Dans l'instanciation de « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 14; long unsigned int ...M = {}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 14>] » :
truc.cpp:4:4:   requis récursivement par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:4:4:   requis par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 0; long unsigned int ...M = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14>] »
truc.cpp:7:39:   requis depuis ici
truc.cpp:4:4: error: pas de fonction correspondant à l'appel « a(std::index_sequence<>) »
   a(std::index_sequence<M...>{});
   ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
truc.cpp:3:6: note: candidate: template<long unsigned int N, long unsigned int ...M> void a(std::index_sequence<N, M ...>)
 void a(std::index_sequence<N, M...>) {
      ^
truc.cpp:3:6: note:   la déduction/substitution de l'argument du patron a échoué:
truc.cpp:4:4: note:   le candidat attend 2 arguments, 0 fourni(s)
   a(std::index_sequence<M...>{});
   ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
truc.cpp:5:3: error: l'assertion statique a échoué
   static_assert(!N);
   ^~~~~~~~~~~~~
[1]    11052 exit 1     g++ -c -O3 truc.cpp -std=c++17 -DC=15

e le sequenze numeriche sono in grado di oltrepassare il limite di profondità di istanza del modello predefinito, sicuramente perché è incorporato:

... requis récursivement par « void a(std::index_sequence<N, M ...>) [avec long unsigned int N = 1; long unsigned int ...M = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499}; std::index_sequence<N, M ...> = std::integer_sequence<long unsigned int, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.