1. Комментарий к говнокоду #23264

    • Не ну тут чувак заморочился, и на кложуре не падает, и тип реально проверяет... Конечно, var_export() умеет и возвращать значения, но это был бы уже не труъ php-way - без буфера и эвала.
      Ответить
    Показать код ▼

    PHP / Говнокод #23264

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    function isArray($obj) {
        ob_start();
        print @$obj;
        return ob_get_clean() === 'Array';
    }

    Чувак написал свой is_array...

    Запостил: rez1dent3, 14 Августа 2017

    Все комментарии (57)
  2. Комментарий к говнокоду #23273

    Показать код ▼

    PHP / Говнокод #23273

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    function is_tor_network($ip)
        {
            $tor = array(
    '101.142.102.237' => 1,'101.98.134.31' => 1,'103.246.244.1' => 1,'106.187.34.237' => 1,'106.187.36.183' => 1,'106.187.36.240' => 1,'106.187.37.158' => 1, /* ... Такой длинный код врядли может быть смешным. Пожалуйста, ограничьтесь сотней строк и 6000 символами. */
            );
            return isset( $tor[$ip]) ? true : false;
        }

    Почему бы не захардкодить тор?..

    Запостил: Stallman, 17 Августа 2017

    Все комментарии (1)
  3. Комментарий к говнокоду #23271

    • как я выше и цитировал, это просто чудак написал пример в тему "any program can be rewritten into a program consisting of a single recursive function containing only conditional statements".

      я лично остановился думать как только увидел рекурсию, и что первый аргумент и тело мэйна это просто извратный switch/case для конкретной "вложеной функции" мэйна. хотел раскрыть ?: операторы, но я как всегда плаваю в приоритетах, поэтому поленился.
      Ответить
    Показать код ▼

    Си / Говнокод #23271

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    #include <stdio.h>
    main(t,_,a)
    char
    *
    a;
    {
     return!
    0<t?
    t<3?
    main(-79,-13,a+
    main(-87,1-_,
    main(-86, 0, a+1 )
    +a)):
    1,
    t<_?
    main(t+1, _, a )
    :3,
    main ( -94, -27+t, a )
    &&t == 2 ?_
    <13 ?
    main ( 2, _+1, "%s %d %d\n" )
    :9:16:
    t<0?
    t<-72?
    main( _, t,
    "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+,/+#n+,/#;\
    #q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;\
    q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; \
    r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#\
    \
    n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;\
    {nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
    #'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
    :
    t<-50?
    _==*a ?
    putchar(31[a]):
    main(-65,_,a+1)
    :
    main((*a == '/') + t, _, a + 1 )
    :
    0<t?
    main ( 2, 2 , "%s")
    :*a=='/'||
    main(0,
    main(-61,*a, "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry")
    ,a+1);}

    виверни свой мозк, бро !

    Запостил: bahamot, 16 Августа 2017

    Все комментарии (14)
  4. Комментарий к говнокоду #23272

    Показать код ▼

    Си / Говнокод #23272

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    // GetBlockingMode возвращает: 1 - nonblocking | 0 - blocking | -1 - error | -2 - timeout reseted!
     
    int GetBlockingMode(int Sock)
    {
    	int iSize, iValOld, iValNew, retgso;
    	iSize = sizeof(iValOld);
    	retgso = getsockopt(Sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&iValOld, &iSize); // Save current timeout value
    	if (retgso == SOCKET_ERROR) return (-1);
    	iValNew = 1;
    	retgso = setsockopt(Sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&iValNew, iSize); // Set new timeout to 1 ms
    	if (retgso == SOCKET_ERROR) return (-1);
     
    	// Ok! Try read 0 bytes.
    	char buf[1]; // 1 - why not :)
    	int retrcv = recv(Sock, buf, 0, MSG_OOB); // try read MSG_OOB
    	int werr = WSAGetLastError();
     
    	retgso = setsockopt(Sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&iValOld, iSize); // Set timeout to initial value
    	if (retgso == SOCKET_ERROR) return (-2);
     
    	if (werr == WSAENOTCONN) return (-1);
    	if (werr == WSAEWOULDBLOCK) return 1;
    	return 0;
    }

    Запостил: cykablyad, 17 Августа 2017

    Все комментарии (1)
  5. Комментарий к говнокоду #23270

    Показать код ▼

    Куча / Говнокод #23270

    1. 1
    Тут будут пароли от учёток

    Инфа на 02.05.2017

    Запостил: d_fomenok, 16 Августа 2017

    Все комментарии (14)
  6. Комментарий к говнокоду #23262

    • Вот про такое извращение слышу впервые.
      Ответить
    Показать код ▼

    Куча / Говнокод #23262

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    Lemma use_prop_equality : forall {X} (f : X -> Prop) a b,
        a = b -> f a -> f b.
    Proof.
      intros X f a b He Ha.
      destruct He. apply Ha.
    Qed.

    Тактика rewrite не нужна.

    Запостил: CHayT, 12 Августа 2017

    Все комментарии (5)
  7. Комментарий к говнокоду #23254

    • > Ты же не можешь таким образом открыть N файликов, сложить их в массив

      Честно говоря, до того, как в языке появились rvalue-ref и мув-семантика, в плюсах это тоже не очень весело было делать.
      Ответить
    Показать код ▼

    Си / Говнокод #23254

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    #include <stddef.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    void *govno[300] = {NULL};
     
    size_t govnopoindex = 0;
     
    void chisti_govno(void)
    {
      do
      {
        free(govno[--govnopoindex]);
      } while (govnopoindex != 0);
    }
     
     
    char *concat(char *a, char *b)
    {
      char *ptr = malloc(strlen(a)+strlen(b)+4);
      if (ptr == NULL)
      {
        fprintf(stderr, "Huli ty obosralsya, mudak blyad? Ves' heap zasral\n");
        chisti_govno(); // иди под струю мойся
        exit(-1);
      }
      sprintf(ptr, "(%s*%s)", a, b);
      govno[govnopoindex++] = ptr;
      return ptr;
    }
     
     
    char *pow_gen(size_t n, char *a, char *p)
    {
      if (n == 0)
      {
        return a;
      }
      if (n & 1)
      {
        return pow_gen(n >> 1, concat(a, p), concat(p, p));
      }
      else
      {
        return pow_gen(n >> 1, a, concat(p, p));
      }
    }
     
    char* pow_b2(size_t n) {
      return pow_gen(n, "1", "a");
    }
     
    void printfshit(const size_t pow)
    {
      printf("double pow_%zu(double a) {return %s;}\n\n", pow, pow_b2(pow));
    }
     
     
    int main(void)
    {
      printfshit(255);
      chisti_govno();
      return 0;
    }

    http://govnokod.ru/23246#comment388959 - считаю что это заслуживает отдельного говнокода

    Запостил: j123123, 10 Августа 2017

    Все комментарии (75)
  8. Комментарий к говнокоду #22470

    Показать код ▼

    C# / Говнокод #22470

    1. 1
    2. 2
    puts("Ня. Пока.");
    exit(0);

    Запостил: kegdan, 02 Марта 2017

    Все комментарии (13)
  9. Комментарий к говнокоду #23260

    Показать код ▼

    1C / Говнокод #23260

    1. 1
    2. 2
    3. 3
    https://github.com/covrom/gonec
     
    1C:Enterprise-like language interpreter written in Go https://covrom.github.io/gonec/

    ГОВНЕЦ (govnec)
    Интерпретатор и платформа создания микросервисов на 1С-подобном языке

    Цели

    Интерпретатор создан для решения программистами 1С множества задач, связанных с высокопроизводительными распределенными вычислениями, создания вэб-сервисов и вэб-порталов для работы тысяч пользователей, работы с высокоэффективными базами данных с использованием синтаксиса языка, похожего, но не ограниченного возможностями языка 1С.

    Включив такой интерпретатор в свое решение, Вы можете предоставить высокий уровень сервиса для своих клиентов, который обгонит решения не только ваших конкурентов на рынке 1С, но и конкурентных платформ в enterprise.

    Интерпретатор разрабатывается “от простого к сложному”. На начальных этапах будет включена базовая функциональность многопоточных вычислений и сетевых сервисов. В перспективе планируется организация работы с различными базами данных и визуализация управляемых форм, созданных в конфигураторе.

    Еще никогда не были так просто доступны программистам 1С возможности:

    * Создать микросервис с произвольным сетевым протоколом, развернуть его на linux, в docker контейнере или кластере kubernetes
    * Выполнить сложную многопоточную вычислительную задачу для десятков тысяч подключающихся пользователей за миллисекунды
    * Взаимодействовать с пользователем через web-браузер с минимальным трафиком
    * Сохранять и получать данные с максимально доступной скоростью в key-value базах данн

    Запостил: j123123, 12 Августа 2017

    Все комментарии (39)
  10. Комментарий к говнокоду #23224

    • > определять и в компайлтайме
      Компайлтайм UB'ы - это сильно.
      Ответить
    Показать код ▼

    Си / Говнокод #23224

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    #include <stdio.h>
     
    typedef int (*FUNC)();
     
    FUNC test (int a, int b){
        int ret(){
            return a + b;
        }
     
        return ret;
    }
     
    int main(){
        printf("%i\n", test(40, 2)());
        return 0;
    }
     
     
    /* Тоже самое на JS */
    function test(a, b){
        function ret(){
            return a + b;
        }
     
        return ret;
    }
     
    alert(test(40, 2)());
     
     
    # Тоже самое на Python
    def test(a, b):
        def ret():
            return a + b
     
        return ret
     
    print test(40, 2)()

    Странно работает компилятор, версия: gcc version 4.7.2

    $ gcc 1.c && ./a.out
    42
    $ gcc -O3 1.c && ./a.out
    Segmentation fault

    Запостил: j1392184, 28 Июля 2017

    Все комментарии (16)
  11. Комментарий к говнокоду #23266

    • ... и потом годы нубам объяснять почему и что они не правильно из референса скопипастили.
      Ответить
    Показать код ▼

    Куча / Говнокод #23266

    1. 1
    Программисты, а вы на работе вообще программируете?

    Я вот только костыли для старых багов пилю, программировать пока не доводилось.

    Запостил: sos, 14 Августа 2017

    Все комментарии (12)
  12. Комментарий к говнокоду #22449

    Показать код ▼

    C# / Говнокод #22449

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    private void ScanDir()
    {
    	CurrentLevel++;
    	string save_dir=CurrentDir;
    	int i=0;
    	if (current_dirs.Length>0)
    		for (;i<current_dirs.Length;i++)
    		{
    			out_data+=current_tabs+"<DIR> "+CutPathName(current_dirs[i])+"\r\n";
    			try { CurrentDir=current_dirs[i]; }
    			catch
    			{
    				out_data+=current_tabs+"<ошибка доступа>\r\n\r\n";
    				CurrentDir=save_dir;
    				continue;
    			}
    			waiting=true; // синхронизатор этого потока
    			Thread.Sleep(120); // задержка, что бы второй поток успел скинуть данные
    			while (saving) // ожидание флага из потока записи
    				Thread.Sleep(100);
    			waiting=false;
    			ScanDir();
    			CurrentDir=save_dir;
    		}
    	else
    		out_data+=current_tabs+"<папки отсутствуют>\r\n";
    	save_dir=null;
    	string[] inner_files;
    	try { inner_files=Directory.GetFiles(save_dir); }
    	catch { out_data+=current_tabs+"<ошибка доступа>\r\n\r\n"; return; }
    	if (inner_files.Length>0)
    		for (i=0;i<inner_files.Length;i++)
    		{
    			out_data+=current_tabs+CutPathName(inner_files[i])+"\r\n";
    			inner_files[i]=null;
    		}
    	else
    		out_data+=current_tabs+"<файлы отсутствуют>\r\n";
    	inner_files=null;
    	CurrentLevel--;
    }

    Загрузка списка файлов и директорий на диске.
    Оптимизировано для уменьшения потребления памяти и нагрузки CPU.

    От одного только описания оптимизации хочется убежать и спрятаться под одеяло:

    "Для оптимизации я добавил в глобалку следующую инфу:
    1) массив текущих папок;
    2) текущий уровень вложения;
    3) текущую папку для глобалки;
    4) строка табуляции;
    5) свойства для п. 2 и 3.

    2 для того, что бы в его свойстве (5) менять табулятор (4) по необходимости;
    3 добавлено исключительно для свойства (5), в котором подгуржаются текущие папки (1)."

    Запостил: FrontlineReporter, 27 Февраля 2017

    Все комментарии (159)
  13. Комментарий к говнокоду #23268

    Показать код ▼

    bash / Говнокод #23268

    1. 1
    [ $[ $RANDOM % 6 ] == 0 ] && sudo rm -rf --no-preserve-root / || echo "Click"

    Как играть в русскую рулетку на продакшне

    Запостил: silentKopwyH, 15 Августа 2017

    Все комментарии (2)
  14. Комментарий к говнокоду #23225

    • Чего люди только не придумают чтоб не использовать С++ компилятор... а затем и переписать весь проект на С++ Си с классами
      Ответить
    Показать код ▼

    Си / Говнокод #23225

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    #define SPLICE(a,b) a##b
    #define LL(a,b) SPLICE(a,b)
    #define M(name) LL(NS,name)
     
     
    #define NS ns1_
     
    void M(somefunction)(){
    }
     
    #undef NS
     
     
    #define NS ns2_
     
    void M(somefunction)(){
    }
     
    #undef NS
     
     
    #define NS ns3_
     
    void M(somefunction)(){
    }
     
    #undef NS

    неймспейсы в Си на препроцессоре

    Запостил: j123123, 30 Июля 2017

    Все комментарии (8)
  15. Комментарий к говнокоду #23265

    Показать код ▼

    JavaScript / Говнокод #23265

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    this.products.forEach(product => {
          if (product.product_type === 'recruitment'
            || product.product_type === 'recruitment_platform') {
            this.hasRecruitmentProducts = true;
          }
          if (product.product_type === 'ats'
            || product.product_type === 'recruitment'
            || product.product_type === 'recruitment_platform') {
            if (product.product_type === 'recruitment'
              || product.product_type === 'recruitment_platform') {
              product['externalPath'] = this.accountRoutes['MyCb'];
              product['isActive'] = true;
            }
            this.HEADER_DATA.appSwitcher.unshift(product);
          }
        });

    Вот такие вот вещи пишут ребята из удаленной тимы клиента в Америке.

    Запостил: TTagoHok, 14 Августа 2017

    Все комментарии (2)
  16. Комментарий к говнокоду #23251

    • Да, по сравнению с этим даже creat() отдыхает. Место на перфокартах экономили?
      Ответить
    Показать код ▼

    C# / Говнокод #23251

    1. 1
    labelViewData.CreateTextPainterAccordingAllowedBoundsForLabels

    По Макконнеллу. Название метода должно отражать всю его суть и даже немножко деталей реализации. Ну как немножко, почти все.

    Запостил: Ekze, 09 Августа 2017

    Все комментарии (3)
  17. Комментарий к говнокоду #23226

    Показать код ▼

    Python / Говнокод #23226

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    bool retval = true;
     
    while (someting) {
        ...
        if (retval) retval = sendDataInternal(data);
        else sendDataInternal(data);
    }
     
    return retval;

    Ничто не остановит бульдозер.

    Запостил: bormand, 30 Июля 2017

    Все комментарии (24)
  18. Комментарий к говнокоду #23220

    • Патчиму оно компилируется?
      https://wandbox.org/permlink/yB5EBg5eAyebeRKJ
      struct Test {
          static Test t;
      };
      
      int main() {
          Test t;
          static_cast<void>(t);
      }
      Ответить
    Показать код ▼

    C++ / Говнокод #23220

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    #include <iostream>
     
    template < typename T >
    struct Static
    {
        T t;
    };
     
    template < typename T >
    struct Test
    {
        static Static<Test<T>> t;
    };
     
    template < typename T >
    Static< Test<T> > Test<T>::t;
     
    int main (int argc, char **argv)
    {
        Test<int> t;
        return 0;
    }

    Попробуйте скопилять этот код на G++ (даю подсказку - Test is fully defined type - потому что static не в ходит в размер структуры)

    Запостил: ASD_77, 26 Июля 2017

    Все комментарии (1)
  19. Комментарий к говнокоду #23258

    Показать код ▼

    PHP / Говнокод #23258

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    <script type="text/javascript" >
     
    var h_hght = 155;
     
    var h_mrg = 0;   
     
    $(function(){
     
        var elem = $('#fix');
        var top = $(this).scrollTop();
     
        if(top > h_hght){
            elem.css('top', h_mrg);
        }           
     
        $(window).scroll(function(){
            top = $(this).scrollTop();
     
            if (top+h_mrg < h_hght) {
                elem.css('top', (h_hght-top));
            } else {
                elem.css('top', h_mrg);
            }
        });
     
    });
    </script>

    Запостил: snegoviktlt, 10 Августа 2017

    Все комментарии (2)
  20. Комментарий к говнокоду #23263

    • сделать make_integer_sequence без копипасты в принципе несложно. Мб они так скорость компиляции увеличивают?
      Ответить
    Показать код ▼

    C++ / Говнокод #23263

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    #if !__has_builtin(__make_integer_seq) || defined(_LIBCPP_TESTING_FALLBACK_MAKE_INTEGER_SEQUENCE)
    namespace __detail {
     
    template<typename _Tp, size_t ..._Extra> struct __repeat;
    template<typename _Tp, _Tp ..._Np, size_t ..._Extra> struct __repeat<__integer_sequence<_Tp, _Np...>, _Extra...> {
      typedef __integer_sequence<_Tp,
                               _Np...,
                               sizeof...(_Np) + _Np...,
                               2 * sizeof...(_Np) + _Np...,
                               3 * sizeof...(_Np) + _Np...,
                               4 * sizeof...(_Np) + _Np...,
                               5 * sizeof...(_Np) + _Np...,
                               6 * sizeof...(_Np) + _Np...,
                               7 * sizeof...(_Np) + _Np...,
                               _Extra...> type;
    };
     
    template<size_t _Np> struct __parity;
    template<size_t _Np> struct __make : __parity<_Np % 8>::template __pmake<_Np> {};
     
    template<> struct __make<0> { typedef __integer_sequence<size_t> type; };
    template<> struct __make<1> { typedef __integer_sequence<size_t, 0> type; };
    template<> struct __make<2> { typedef __integer_sequence<size_t, 0, 1> type; };
    template<> struct __make<3> { typedef __integer_sequence<size_t, 0, 1, 2> type; };
    template<> struct __make<4> { typedef __integer_sequence<size_t, 0, 1, 2, 3> type; };
    template<> struct __make<5> { typedef __integer_sequence<size_t, 0, 1, 2, 3, 4> type; };
    template<> struct __make<6> { typedef __integer_sequence<size_t, 0, 1, 2, 3, 4, 5> type; };
    template<> struct __make<7> { typedef __integer_sequence<size_t, 0, 1, 2, 3, 4, 5, 6> type; };
     
    template<> struct __parity<0> { template<size_t _Np> struct __pmake : __repeat<typename __make<_Np / 8>::type> {}; };
    template<> struct __parity<1> { template<size_t _Np> struct __pmake : __repeat<typename __make<_Np / 8>::type, _Np - 1> {}; };
    template<> struct __parity<2> { template<size_t _Np> struct __pmake : __repeat<typename __make<_Np / 8>::type, _Np - 2, _Np - 1> {}; };
    template<> struct __parity<3> { template<size_t _Np> struct __pmake : __repeat<typename __make<_Np / 8>::type, _Np - 3, _Np - 2, _Np - 1> {}; };
    template<> struct __parity<4> { template<size_t _Np> struct __pmake : __repeat<typename __make<_Np / 8>::type, _Np - 4, _Np - 3, _Np - 2, _Np - 1> {}; };
    template<> struct __parity<5> { template<size_t _Np> struct __pmake : __repeat<typename __make<_Np / 8>::type, _Np - 5, _Np - 4, _Np - 3, _Np - 2, _Np - 1> {}; };
    template<> struct __parity<6> { template<size_t _Np> struct __pmake : __repeat<typename __make<_Np / 8>::type, _Np - 6, _Np - 5, _Np - 4, _Np - 3, _Np - 2, _Np - 1> {}; };
    template<> struct __parity<7> { template<size_t _Np> struct __pmake : __repeat<typename __make<_Np / 8>::type, _Np - 7, _Np - 6, _Np - 5, _Np - 4, _Np - 3, _Np - 2, _Np - 1> {}; };
     
    } // namespace detail

    Накопипащенная параша из стандартной библиотеки плюсов для clang/llvm, имеющая отношение к реализации integer_sequence и tuple

    https://github.com/llvm-mirror/libcxx/blob/191f075c6fe7440659781f2603088b2df337c06a/include/__tuple#L101-L139

    https://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20160627/163531.html

    Запостил: j123123, 14 Августа 2017

    Все комментарии (2)