สร้างข้อความแสดงข้อผิดพลาดที่ยาวที่สุดใน C ++


89

เขียนโปรแกรมสั้นที่จะสร้างข้อความที่ยาวที่สุดที่เป็นไปได้ข้อผิดพลาดในมาตรฐาน C ++ คอมไพเลอร์ ( gcc, cl.exe, iccหรือclang)

คะแนนของแต่ละรายการคือจำนวนตัวอักษรในข้อความแสดงข้อผิดพลาดที่ยาวที่สุดที่คอมไพเลอร์ปล่อยออกมา ชนิดที่รวมอยู่ในซอร์สโค้ดของคุณและคอมไพเลอร์ที่ยกมาจะนับเป็นอักขระตัวเดียว

การโกง

คุณสามารถกำหนดเทมเพลตใหม่ในเทมเพลตในเทมเพลตที่มีชื่อยาว ๆ ได้ แต่ฉันคาดหวังว่ามีอะไรสร้างสรรค์ ฉันพยายามป้องกันบางอย่างโดยกฎล่าสุด แต่แน่นอนว่ากฎนั้นดีกว่าและฉันยินดีที่จะปรับปรุง


3
แก้ไขแท็ก ฉันยอมรับว่า [kolmogorov-complex] นั้นค่อนข้างยืดเยื้อแต่ฉันคิดว่ามันแสดงออกได้ในกรณีนี้
dmckee

23
Error.message.length / code.lengthบางทีคุณควรไปสำหรับอัตราส่วน:
ผู้ใช้ที่ไม่รู้จัก

ที่เกี่ยวข้อง: codegolf.stackexchange.com/questions/5802/…
Ilmari Karonen

คำตอบ:


52

ข้อความผิดพลาดของแม่แบบนั้นสนุกในการถอดรหัส พิจารณาสิ่งนี้:

#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 );
}

การคอมไพล์ด้วยgcc -c error.cpp(4.6.3) จะสร้างเอาต์พุต 15786 ไบต์โดยมีบรรทัดที่ยาวที่สุด 330 อักขระ

ในไฟล์รวมจาก /usr/include/c++/4.6/algorithm:63+
                 จาก error_code.cpp: 2:
/usr/include/c++/4.6/bits/stl_algo.h: ในฟังก์ชั่น '_RandomAccessIterator std :: ___ator_terator terator :: ___ator_terator_terator_stator_terpator_tp/ สุ่มสุ่ม >>, _Tp = int] ':
/usr/include/c++/4.6/bits/stl_algo.h:4403:45: อินสแตนซ์จาก '_IIter std :: find (_IIter, _IIter, const _Tp &) [กับ _IIter = __gnu_cxx :: __ normal_iterator *, std :: vector >, _Tp = int] '
error_code.cpp: 8: 89: อินสแตนซ์จากที่นี่
/usr/include/c++/4.6/bits/stl_algo.h:162:4: ข้อผิดพลาด: ไม่ตรงกับ 'โอเปอเรเตอร์ ==' ใน '__first .__ gnu_cxx :: __ normal_iterator :: โอเปอเรเตอร์ * [with _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: หมายเหตุ: ผู้สมัครคือ:
/usr/include/c++/4.6/bits/stl_pair.h:201/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: pair &, const std :: pair &)
/usr/include/c++/4.6/bits/stl_iterator.h:285/5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:335/5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/allocator.h:122/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/allocator.h:127/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/stl_vector.h:1273,5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: vector &, const std :: vector &)
/usr/include/c++/4.6/ext/new_allocator.h:123/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: new_allocator &, const __gnu_cxx :: new_allocator &)
/usr/include/c++/4.6/bits/stl_iterator.h:805/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:799/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_algo.h:4403:45: อินสแตนซ์จาก '_IIter std :: find (_IIter, _IIter, const _Tp &) [กับ _IIter = __gnu_cxx :: __ normal_iterator *, std :: vector >, _Tp = int] '
error_code.cpp: 8: 89: อินสแตนซ์จากที่นี่
/usr/include/c++/4.6/bits/stl_algo.h:166:4: ข้อผิดพลาด: ไม่ตรงกับ 'โอเปอเรเตอร์ ==' ใน '__first .__ gnu_cxx :: __ normal_iterator :: โอเปอเรเตอร์ * [with _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: หมายเหตุ: ผู้สมัครคือ:
/usr/include/c++/4.6/bits/stl_pair.h:201/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: pair &, const std :: pair &)
/usr/include/c++/4.6/bits/stl_iterator.h:285/5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:335/5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/allocator.h:122/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/allocator.h:127/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/stl_vector.h:1273,5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: vector &, const std :: vector &)
/usr/include/c++/4.6/ext/new_allocator.h:123/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: new_allocator &, const __gnu_cxx :: new_allocator &)
/usr/include/c++/4.6/bits/stl_iterator.h:805/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:799/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_algo.h:170:4: ข้อผิดพลาด: ไม่ตรงกับ 'โอเปอเรเตอร์ ==' ใน '__first .__ gnu_cxx :: __ normal_iterator :: โอเปอเรเตอร์ * [with _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: หมายเหตุ: ผู้สมัครคือ:
/usr/include/c++/4.6/bits/stl_pair.h:201/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: pair &, const std :: pair &)
/usr/include/c++/4.6/bits/stl_iterator.h:285/5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:335/5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/allocator.h:122/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/allocator.h:127/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/stl_vector.h:1273,5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: vector &, const std :: vector &)
/usr/include/c++/4.6/ext/new_allocator.h:123/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: new_allocator &, const __gnu_cxx :: new_allocator &)
/usr/include/c++/4.6/bits/stl_iterator.h:805/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:799/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_algo.h:174:4: ข้อผิดพลาด: ไม่ตรงกับ 'โอเปอเรเตอร์ ==' ใน '__first .__ gnu_cxx :: __ normal_iterator :: โอเปอเรเตอร์ * [with _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: หมายเหตุ: ผู้สมัครคือ:
/usr/include/c++/4.6/bits/stl_pair.h:201/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: pair &, const std :: pair &)
/usr/include/c++/4.6/bits/stl_iterator.h:285/5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:335/5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/allocator.h:122/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/allocator.h:127/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/stl_vector.h:1273,5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: vector &, const std :: vector &)
/usr/include/c++/4.6/ext/new_allocator.h:123/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: new_allocator &, const __gnu_cxx :: new_allocator &)
/usr/include/c++/4.6/bits/stl_iterator.h:805/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:799/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_algo.h:182:4: ข้อผิดพลาด: ไม่ตรงกับ 'โอเปอเรเตอร์ ==' ใน '__first .__ gnu_cxx :: __ normal_iterator :: โอเปอเรเตอร์ * [with _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: หมายเหตุ: ผู้สมัครคือ:
/usr/include/c++/4.6/bits/stl_pair.h:201/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: pair &, const std :: pair &)
/usr/include/c++/4.6/bits/stl_iterator.h:285/5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:335/5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/allocator.h:122/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/allocator.h:127/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/stl_vector.h:1273,5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: vector &, const std :: vector &)
/usr/include/c++/4.6/ext/new_allocator.h:123/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: new_allocator &, const __gnu_cxx :: new_allocator &)
/usr/include/c++/4.6/bits/stl_iterator.h:805/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:799/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_algo.h:186:4: ข้อผิดพลาด: ไม่ตรงกับ 'โอเปอเรเตอร์ ==' ใน '__first .__ gnu_cxx :: __ normal_iterator :: โอเปอเรเตอร์ * [with _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: หมายเหตุ: ผู้สมัครคือ:
/usr/include/c++/4.6/bits/stl_pair.h:201/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: pair &, const std :: pair &)
/usr/include/c++/4.6/bits/stl_iterator.h:285/5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:335/5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/allocator.h:122/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/allocator.h:127/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/stl_vector.h:1273,5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: vector &, const std :: vector &)
/usr/include/c++/4.6/ext/new_allocator.h:123/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: new_allocator &, const __gnu_cxx :: new_allocator &)
/usr/include/c++/4.6/bits/stl_iterator.h:805/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:799/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_algo.h:190:4: ข้อผิดพลาด: ไม่ตรงกับ 'โอเปอเรเตอร์ ==' ใน '__first .__ gnu_cxx :: __ normal_iterator :: โอเปอเรเตอร์ * [with _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: หมายเหตุ: ผู้สมัครคือ:
/usr/include/c++/4.6/bits/stl_pair.h:201/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: pair &, const std :: pair &)
/usr/include/c++/4.6/bits/stl_iterator.h:285/5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:335/5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: reverse_iterator &, const std :: reverse_iterator &)
/usr/include/c++/4.6/bits/allocator.h:122/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/allocator.h:127/5: หมายเหตุ: เทมเพลตบูล std :: โอเปอเรเตอร์ == (const std :: allocator &, const std :: allocator &)
/usr/include/c++/4.6/bits/stl_vector.h:1273,5: หมายเหตุ: เทมเพลต bool std :: operator == (const std :: vector &, const std :: vector &)
/usr/include/c++/4.6/ext/new_allocator.h:123/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: new_allocator &, const __gnu_cxx :: new_allocator &)
/usr/include/c++/4.6/bits/stl_iterator.h:805/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)
/usr/include/c++/4.6/bits/stl_iterator.h:799/5: หมายเหตุ: เทมเพลตบูล __gnu_cxx :: operator == (const __gnu_cxx :: __ normal_iterator &, const __gnu_cxx :: __ normal_iterator &)

แก้ไข 2016-04-29: gcc 5.3.0 ดีกว่า: เพียง 9300 ไบต์บรรทัดที่ยาวที่สุดคือ 361 ตัวอักษร ...

แก้ไข 2019-04-04: gcc 6.5.0: 11237 bytes แต่ให้คำแนะนำเกี่ยวกับข้อผิดพลาดเช่นเดียวกับในบรรทัดเหล่านี้:

error.cpp: 7: 92: ต้องการจากที่นี่
/usr/include/c++/6/bits/predefined_ops.h:199:17: ข้อผิดพลาด: ไม่ตรงกับ 'โอเปอเรเตอร์ ==' (ประเภทตัวถูกดำเนินการคือ 'std :: vector' และ 'const int')
  {return * __ it == _M_value; }
           ~~~~~~ ^ ~~~~~~~~~~

120

19 ตัวอักษร

สร้างไฟล์a.cppด้วยเนื้อหานี้:

#include __FILE__
p;

รวบรวมเป็น:

g++ a.cpp

และรับข้อความแสดงข้อผิดพลาด 21300 บรรทัดที่น่าทึ่ง:

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

...

... 21280 บรรทัดข้อผิดพลาด ...
...

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 รายการโปรดของผู้พิพากษา ไม่ได้คิดเกี่ยวกับการละเมิดนี้โดยเฉพาะ
Elazar Leibovich

1
ฮึ่ม แล้ว#include __FILE__ชื่อไฟล์ที่ยาวมาก ..
AKX

1
@Rob จะรวมไฟล์เดียวกันซ้ำแล้วซ้ำอีกและจะกำหนดหลักใหม่ทุกครั้ง
BЈовић

4
โหวตขึ้นเนื่องจากไม่มีเทมเพลตน่าเบื่ออยู่ที่นั่น :)
kiwixz

2
บนเครื่อง Windows ของฉันเสียงดังกราวผลิตออกได้อีกต่อไป, ขึ้นจาก 8 MB (!!!) clang++ -ferrorlimit=1000 a.cppเมื่อรวบรวมกับ บรรทัดที่ยาวที่สุดคือ 466 อักขระ
bwDraco

48

98 (จำเป็น) ตัวละคร:

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);}

สร้างเอาต์พุตข้อผิดพลาดต่อไปนี้ใน 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> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >’

สถิติ:

$ 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 (สร้างเอาต์พุตที่ยาวกว่า):

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;
}

ฉันค้นพบสิ่งนี้เมื่อฉันต้องการดูว่า C ++ รองรับการเรียกซ้ำแบบ polymorphic (และอย่างที่คุณเห็นได้อย่างชัดเจนว่ามันไม่ได้) นี่เป็นตัวอย่างเล็กน้อยของการเรียกซ้ำแบบ polymorphic ใน 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]] ...

นี่นี้ต้อง Haskell ที่จะกระทำเช่นนั้น instantiates Show x, Show [x], Show [[x]], Show [[[x]]], ไม่มีที่สิ้นสุด Haskell ทำโดยเปลี่ยน(Show x) =>เป็นพารามิเตอร์ implicit เป็นฟังก์ชันที่fเพิ่มโดยคอมไพเลอร์บางอย่างเช่นนี้:

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 ++ ทำโดยพยายามสร้างอินสแตนซ์ดังกล่าวจนกระทั่งเกินความลึกของอินสแตนซ์ของเทมเพลต


6
ที่สูงถึง 102 ไบต์ ( clไม่ชอบโดยนัยintในโหมด C ++) มันสร้างข้อผิดพลาด 14.380.923 ไบต์หลังจากเวลา CPU 4½นาทีและการใช้หน่วยความจำสูงสุดประมาณ 100 MiB
Joey

คุณช่วยอธิบายว่าคุณพยายามทำอะไรให้สำเร็จด้วยการเรียกซ้ำแบบ polymorphic เนื่องจากในตัวอย่างทั้งใน Haskell และใน C ++ กระบวนการนั้นไม่มีที่สิ้นสุดความแตกต่างเพียงอย่างเดียวคือมันเกิดขึ้นในเวลาทำงานหรือเวลารวบรวม
sukhmel

@sukhmel ไม่เพราะ Haskell ขี้เกียจมันจะรวบรวมและเรียกใช้ (ตามตัวอย่าง)
cat

@cat ฉันไม่ได้บอกเป็นนัย ๆ ว่ามันจะไม่ทำงานฉันชี้ให้เห็นว่าการวิ่งแบบนี้จะไม่หยุดหรือจะเป็นอย่างไร ฉันคิดว่าในสิ่งที่โจอี้พยายามที่จะบรรลุว่าควรจะมีเงื่อนไขหยุดในกรณีที่มีเทมเพลตเฉพาะนั่นคือสาเหตุที่ฉันสงสัยว่าอะไรคือแนวคิดที่อยู่เบื้องหลังการพยายามเรียกใช้โพลีมอร์ฟิคซ้ำซาก
sukhmel

41

จากความยาวข้อความ / อัตราส่วนความยาวโค้ดนี่อาจเป็นทางออกที่ดีที่สุด

ข้อความ (81):

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

81/0 = Inf


13
+1 วิธีที่ฉลาดอัตราส่วนที่ดีที่สุด! แต่ไม่ใช่ข้อความอีกต่อไป ...
ซินซิส

1
ข้อความนี้มีขนาด 81 ไบต์ ไม่ว่าจะเป็นเรื่องสำคัญ แต่เป็นเพียง FYI
caird coinheringaahing

37

279 ตัวอักษร

#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)

กับ GCC 4.2.1 สร้างข้อผิดพลาดerror: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘foofoo....foofoo’กับ 2 ^ 21 fooสำเนาของ 6,291,558 ไบต์ในทุก มันเกี่ยวกับตัวระบุขนาดใหญ่เท่าที่ฉันจะได้รับแทนที่fooด้วยfoodสร้าง ICE


19
gcc 4.4.5 segfaults ชนะ!
Joey Adams

8
@JoeyAdams: โปรดรายงานสิ่งนี้ว่าเป็นข้อผิดพลาดกว่า
the_drow

9
@the_drow มันเป็นคุณสมบัติ
Mateen Ulhaq

1
@muntoo: ทำไมมา? ICE ไม่ใช่ความคิดที่ดี
the_drow

2
รูปแบบเช่นนี้จะนำคุณไป#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)สู่ นี้ได้รับฉันข้อผิดพลาดเกี่ยวกับตราบเท่าที่มีรหัสมากน้อยและเติบโตมากได้เร็วขึ้นด้วยการเพิ่มรูปแบบในมิติใด ๆ เนื่องจากเราเป็นหลักการใช้ฟังก์ชั่น Ackermann
David Stone

24

แอพที่คล้ายกับ VJo:
a.cpp:

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

g ++ a.cpp

สร้างผลผลิตจำนวนมาก (อย่างน้อย 2 กิกะไบต์ก่อนที่ฉันจะฆ่ามัน)


22

รหัสต่อไปนี้ขึ้นอยู่กับข้อผิดพลาดจริงที่ฉันเคยพบ

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;
}

(ใช้ gcc)

การเรียกใช้เทมเพลตใหม่ที่เห็นได้ชัด แต่เนื่องจากฉันใช้ftemplate-depth=100000สำหรับการเรียกใช้นี้จึงไม่ทำให้เกิดข้อผิดพลาด แหล่งที่มาที่แท้จริงของข้อความแสดงข้อผิดพลาดมาจากchar baz[i];ซึ่งสร้างข้อผิดพลาดเมื่อiลดลงถึง -1

หลังจากนั้นประมาณครึ่งชั่วโมงผมนั่งอยู่บน21,000 รวบรวมข้อผิดพลาด , 300,000 บรรทัดของข้อความผิดพลาดและ280 เมกะไบต์ของ RAM ที่ใช้โดยคอมไพเลอร์ และมันก็ไม่แสดงอาการหยุด

แก้ไข:

หนึ่งชั่วโมงต่อมาในขณะนี้ที่36,000 รวบรวมข้อผิดพลาด , 504,000 บรรทัดของข้อความผิดพลาดและ480 เมกะไบต์แรม ... และยังคงเป็นไป

แก้ไข # 2:

ประมาณครึ่งชั่วโมงต่อมา:

ccplus1.exe has stopped working

สถิติสุดท้าย: 38,876 ข้อผิดพลาดของคอมไพเลอร์ , 544,624 บรรทัดของข้อความแสดงข้อผิดพลาดรวมเป็น 48.8 เมกะไบต์ของข้อมูลและ518.9 เมกะไบต์ของ RAMที่คอมไพเลอร์ใช้ก่อนที่จะเกิดปัญหา


2
ฉันแน่ใจว่าไม่มีข้อความแสดงข้อผิดพลาดเหล่านั้นแม้แต่ชี้ไปที่ปัญหาจริง ... ซึ่งเป็นเรื่องปกติของการพิมพ์ STL เฉลี่ย
Mark Lakata

21

28 ไบต์

การก่อวินาศกรรมห้องสมุดมาตรฐาน:

#define std +
#include<map>

ใช้เสียงดังกราวบน 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 บรรทัด, 50 ข้อผิดพลาดและ segfault คอมไพเลอร์ !

เสียงดังกราวรุ่น:

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
คุณส่งรายงานข้อผิดพลาดสำหรับ segfault นั้นหรือไม่
2560

ด้วยเวอร์ชัน LLVM ปัจจุบันของฉัน (Apple LLVM เวอร์ชัน 8.0.0 (เสียงดังกราว -800.0.42.1)) ฉันไม่ได้รับ segfault อีกต่อไป ไม่แน่ใจว่าฉันควรส่งอะไรหรือไม่ - สงสัยว่าผู้ดูแลระบบ LLVM จะดูแลเรื่องข้อผิดพลาดเก่าหรือไม่
nneonneo

10

ฉันบังเอิญเจอสิ่งนี้โดยบังเอิญ:

#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");
    }
}

ใน c ++ x11 จะสร้างข้อความแสดงข้อผิดพลาด 44kb ซึ่งคอมไพเลอร์พยายามพูดว่า: โปรดกำหนดตัวยึดตำแหน่งสำหรับอาร์กิวเมนต์แรกหากคุณกำหนดไว้เป็นวินาที

เห็นมันบนideone


6
ฉันกลัวในการทำพิมพ์ผิดในโปรแกรมภาษา C ++ ที่ใช้ STL และ ...
มาร์ค Lakata

+1 สำหรับคำตอบที่เป็นตัวอย่างชีวิตจริง
Jerry Jeremiah

10

C ++

ขึ้นอยู่กับโซลูชันของBћовиЈ:

ไฟล์: golf.cpp:

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

การใช้งานภายใต้ G ++ จะไม่เสร็จสมบูรณ์อย่างไรก็ตามฉันได้คำนวณความยาวของข้อผิดพลาดแล้วในที่สุดมันจะเปล่งออกมาโดยประมาณ 85 * 2 ^ 140 เทราไบต์


9

เทมเพลตหลากหลาย C ++ 11 (69 ตัวอักษร)

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

int main() {
    f();
}

การกำหนดค่าความลึกการสร้างแม่แบบสูงสุดคุณสามารถกำหนดความยาวของข้อผิดพลาดได้ นี่คือตัวอย่างการใช้ GCC 4.8.1 พร้อมความลึกของแม่แบบเริ่มต้น (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, 0, 0, 0, 0, 0, 0, 0, 0, 0}] 'return f <0, p ... > (); ^ prog.cpp: 4: 22: จำเป็นต้องเรียกซ้ำจาก 'void f () [with int ... p = {0}]' prog.cpp: 4: 22: ต้องการจาก 'void f () [with int .. .p = {}] 'prog.cpp: 8: 4: ต้องการจากที่นี่ 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}] 'ส่งคืน f <0, p ... > () ; ^ prog.cpp: 4: 22: จำเป็นต้องเรียกซ้ำจาก 'void f () [with int ... p = {0}]' prog.cpp: 4: 22: ต้องการจาก 'void f () [with int .. .p = {}] 'prog.cpp: 8: 4: ต้องการจากที่นี่ 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}] 'ส่งคืน f <0, p ... > () ; ^ prog.cpp: 4: 22: จำเป็นต้องเรียกซ้ำจาก 'void f () [with int ... p = {0}]' prog.cpp: 4: 22: ต้องการจาก 'void f () [with int .. .p = {}] 'prog.cpp: 8: 4: ต้องการจากที่นี่

prog.cpp: 4: 22: ข้อผิดพลาด: ไม่มีฟังก์ชั่นที่ตรงกันสำหรับการเรียกไปที่ 'f ()' prog.cpp: 4: 22: หมายเหตุ: ผู้สมัครคือ: prog.cpp: 2: 6: บันทึก: แม่แบบโมฆะ f () เป็นโมฆะ f () ^ prog.cpp: 2: 6: หมายเหตุ: การแทนที่ของอาร์กิวเมนต์เทมเพลตที่อนุมานทำให้เกิดข้อผิดพลาดที่เห็นด้านบน prog.cpp: 4: 22: ข้อผิดพลาด: return-statement พร้อมค่าในฟังก์ชันส่งคืน 'void' [-fpermissive ] return f <0, p ... > (); ^

นอกจากนี้คุณสามารถเพิ่มตัวละครอีกสิบตัวและใช้จำนวนเต็มอันเดอร์ที่ไม่ได้ลงนามเพื่อเพิ่มความยาวของข้อผิดพลาด:

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}]' กลับฉ <0-1, p ... > (); ^ prog.cpp: 4: 24: จำเป็นต้องเรียกซ้ำจาก 'void f () [พร้อม int ที่ไม่ได้ลงชื่อ ... p = {4294967295u}]' prog.cpp: 4: 24:
ต้องการจาก 'void f () [ด้วย int ที่ไม่ได้ลงชื่อ ... p = {}]' prog.cpp: 8: 4:
ต้องการจากที่นี่

prog.cpp: 4: 24: ข้อผิดพลาด: ไม่มีฟังก์ชั่นที่ตรงกันสำหรับการเรียกไปที่ 'f ()' prog.cpp: 4: 24: หมายเหตุ: ผู้สมัครคือ: prog.cpp: 2: 6: บันทึก: แม่แบบโมฆะ f () เป็นโมฆะ f () ^ prog.cpp: 2: 6: หมายเหตุ: การแทนที่ของอาร์กิวเมนต์เทมเพลตที่อนุมานทำให้เกิดข้อผิดพลาดที่เห็นด้านบน prog.cpp: 4: 24: ข้อผิดพลาด: return-statement พร้อมค่าในฟังก์ชันส่งคืน 'void' [-fpermissive ] return f <0-1, p ... > ();

                  ^

นี่คือตัวอย่างการใช้งานที่ ideone


6

82 ไบต์:วิธีนี้ทำงานคล้ายกับวิธีการของ Joey Adamsแต่ข้อความแสดงข้อผิดพลาดจะเพิ่มขึ้นแบบทวีคูณเมื่อเทียบกับ-ftemplate-depth(เนื่องจากstd::set<T>เป็นจริงstd::set<T, std::less<T>, std::allocator<T>>)

สำหรับ(x = -ftemplate-depth) >= 28จะมีข้อความแสดงข้อผิดพลาด1460 × 3 x-27 + 269x - 5381 ไบต์ (รวบรวมโดย gcc 7.2.0) นั่นคือในการตั้งค่าเริ่มต้น (x = 900) มันจะส่งออกประมาณ4.9 × 10 419ไบต์ของข้อผิดพลาดทางทฤษฎี

โปรดทราบว่าหากไม่มีreturnข้อความแสดงข้อผิดพลาดจะสร้างขึ้นเมื่อสิ้นสุดการรวบรวมเท่านั้น (ดังนั้นในการตั้งค่าเริ่มต้นคุณจะไม่ได้รับข้อความ - คุณจะมีหน่วยความจำหมดก่อน)

คำเตือน: การคอมไพล์โปรแกรมนี้จะใช้หน่วยความจำมาก

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

ลองออนไลน์!


ใช้mapดูเหมือนอย่างเคร่งครัดชั่วร้ายมากขึ้นเนื่องจากstd::map<T,T>เป็นstd::map<T,T,std::less<T>,std::allocator<std::pair<T,T>>>เพื่อให้คุณได้รับการเรียกซ้ำ 5 ทิศทางแทน 3 ไบต์เพียง 2 มากขึ้น
nneonneo

ตรวจสอบกับ LLVM เวอร์ชัน 10.0.0 (clang-1000.11.45.5) โดยไม่มีค่าสถานะพิเศษ สร้าง 148,379 ไบต์ที่-ftemplate-depth=13, 423,572 ไบต์ที่-ftemplate-depth=14และ 1,247,322 -ftemplate-depth=15ไบต์ที่ mapตัวแปรสร้าง 13,373,990 ไบต์ที่ระดับความลึก 14 และ 66,759,871 ไบต์ที่ระดับความลึก 15
nneonneo

นกกระยางค่าเริ่มต้นของ Clang คือ-ftemplate-depth=1024ซึ่งหมายความว่าอยู่ทางตอนเหนือของ 10 ^ 713 ไบต์พร้อมmapตัวแปร ฉันเชื่อว่านี่หมายความว่าคุณจะชนะ ...
nneonneo

4

สิ่งนี้สร้างผลลัพธ์ไม่สิ้นสุดใน GCC 5.2 และ Clang 3.6 (บน Clang ต้องการ-ferror-limit=0บน GCC ทำงานร่วมกับการตั้งค่าเริ่มต้น):

#include __FILE__
#include __FILE__

2

a.cppมีแฟ้มชื่อ รหัส:

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"
}

นี่คือส้อมระเบิดโดยที่ n = 40


0
  • 50 ไบต์: ผลลัพธ์จะเป็นผลรวมของความยาวของตัวเลขบวกทั้งหมดพร้อมกับข้อความแสดงข้อผิดพลาดเดียว:

=>

#include<utility>
std::make_index_sequence<-1>::x;
  • 174 ไบต์: การกระจายกำลังสองที่มีข้อความแสดงข้อผิดพลาดหลายรายการ:

=>

#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>{})};

รวบรวมกับ

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

index_sequence ดูเหมือนว่าจะหลีกเลี่ยงปัญหาขีดจำกัดความลึกของอินสแตนซ์ของอินสแตนซ์

  • สำหรับ C = 10: 8238 ตัวอักษร
  • สำหรับ C = 100: 264288 ตัวอักษร
  • สำหรับ C = 1,000: 23118522 ตัวอักษร

ข้อผิดพลาดมีลักษณะดังนี้: ลำดับทั้งหมด 0 ... C-1 ดูเหมือนว่าจะถูกพิมพ์ครั้ง 4 * C

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

และลำดับตัวเลขสามารถผ่านขีด จำกัด การสร้างอินสแตนซ์ของแม่แบบเริ่มต้นได้อย่างแน่นอนเนื่องจากเป็นค่าภายใน:

... 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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.