LINUX.ORG.RU
ФорумTalks

Where is your god now?

 


0

3
template <int number>
class T1
{
};

template <class T1>
class T2
{
};

T2<T1<8>>1>> t;

Как должен повести себя компилятор?

★★★★

Последнее исправление: quiet_readonly (всего исправлений: 1)

Ответ на: комментарий от wota

Но ты же не будешь утверждать, что крестами можно заменить С везде, и справляться он будет, как минимум, не хуже?

а оно так и есть - ядро linux в свое время собирали g++, большая часть кода на С легко собирается им же после «косметических» правок

И?

encyrtid ★★★★★
()
Ответ на: комментарий от wota

ядро linux в свое время собирали g++

Это вызвало столько боли, что идея была заброшена.

большая часть кода на С легко собирается им же после «косметических» правок

Если этот код придерживается обшего подмножества Си и Си++. Посмотрю я, какие «косметические правки» потребуются работе с комплексными числами или VLA.

tailgunner ★★★★★
()
Ответ на: комментарий от Begemoth

Кстати, а всякие _Complex, _Alignas, _Noreturn, _Threadlocal в С++ не притащили?

именно в таком виде - вроде как нет, добавили thread_local, alignof и пр.

wota ★★
()
Ответ на: комментарий от tailgunner

Это вызвало столько боли, что идея была заброшена.

Да тут одно упоминание такой возможности у народа вызывает столько боли.

Sadler ★★★
()
Ответ на: комментарий от Sadler

Да тут одно упоминание такой возможности у народа вызывает столько боли.

Ты путаешь боль с иронией. Те, кто более-менее в теме, просто покрутят пальцем у виска на предлжение собрать ядро Си++-компилятором.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Это вызвало столько боли, что идея была заброшена.

ага, а еще использование стандарта С у них тоже вызвало много боли и в итоге С как он есть был заброшен

потребуются работе с комплексными числами или VLA.

а что там трудного то? тот же VLA прекрасно создается через alloca, и не надо говорить про стандарты - большая часть кода на С пестрит #ifdef на предмет подключения нестандартных хедеров, если же хочется стандарта - есть vector

wota ★★
()
Ответ на: комментарий от tailgunner

Те, кто более-менее в теме, просто покрутят пальцем у виска на предлжение собрать ядро Си++-компилятором.

а те кто еще больше в теме сделают так же в случае с С-компилятором

wota ★★
()

сколько же жопопоболи вызывает С++ у кодеров на языке, который работает быстрее процессора и может выполнить бесконечный цикл до конца

ckotinko ☆☆☆
()
Ответ на: комментарий от wota

ты не стесняйся

Тебе показалось.

обоснуй

void foo(void *pkt, int n)
{
   struct {
     int head, body[n], tail;
   } *parsed_pkt = pkt;

   for (int i = 0; i < n; i++)
     printf("%d\n", parsed_pkt->tail);
}

Давай свои тривиальные правки и alloca.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Давай свои тривиальные правки и alloca.

твой пример кстати не соберется даже clang, даже с -std=c99, да и мало кто вообще так пишет, а так - да, придется сделать нетривиально и менее удобно/красиво:

void foo(void *pkt, int n)
{
  struct {
    int* head() { return pkt_;}
    int* body() { return head()+1;}
    int* tail() { return body()+n_;}

    int *pkt_, n_;
  } parsed_pkt = { (int*) pkt, n };

  for (int i = 0; i < n; i++)
    printf("%d\n", *parsed_pkt.tail());
}
wota ★★
()
Ответ на: комментарий от wota

твой пример кстати не соберется даже clang, даже с -std=c99

Мой пример собрался gcc 4.3.2

придется сделать нетривиально и менее удобно/красиво

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

Да, и про _Complex не забываем - там тоже будет весело.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от wota

да, C++ прекрасно себе используется в embedded

Есть устройства, на которые кресты не влезут из-за более жирного (по сравнению с С) рантайма.

encyrtid ★★★★★
()
Ответ на: комментарий от encyrtid

Есть устройства, на которые кресты не влезут из-за более жирного (по сравнению с С) рантайма.

Впервые слышку про рантайм крестов. Не проясните?

quiet_readonly ★★★★
() автор топика
Ответ на: комментарий от tailgunner

Мой пример собрался gcc 4.3.2

но не соберется clang, msvc и пр., сам С конечно ни в чем не виноват, это так - к вопросу о совместимости, которая к сожалению не такая, как хотелось бы

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

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

Да, и про _Complex не забываем - там тоже будет весело.

оно даже не обязательно к реализации - т.е. считай, что его и нет, да и проблем с переносом на С++ я не вижу, хотя конечно придется руками править

wota ★★
()
Ответ на: комментарий от wota

Мой пример собрался gcc 4.3.2

но не соберется clang, msvc и пр

Ну, про MSVC вообще говорить не приходится.

попасть в реальном коде на такое крайне маловероятно, ну и если говорить о реальных задачах - такой код можно и оставить на С, а новый писать с Protocol Buffers

Это не работа с сетью. Формат жестко задан железом.

Да, и про _Complex не забываем - там тоже будет весело.

оно даже не обязательно к реализации

Что-то я не вижу в стандарте указаний на необязательность.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

вот расскажи, о задушеный жабой человек, зачем ты привел этот говнокод?

void foo(void *pkt, int n)
{
   typedef struct { int head; }head_t;
   typedef struct { int tail;} tail_t;
   head_t * hd(pkt);
   tail_t   *  tl(pkt+sizeof(head_t)+sizeof(int)*n);
   int       *  bd(pkt+sizeof(head_t));

   ...
}
почему вы, жабы, не можете по человечески кодить-то?

ckotinko ☆☆☆
()
Ответ на: комментарий от ckotinko

зачем ты привел этот говнокод?

Говнокод - это то, что привел ты. Байтоебский говнокод вида «йа тепрь умейу в адреснуйу арифметику!!11».

почему вы, жабы, не можете по человечески кодить-то?

Ну что тебе скзатаь, милок... ПНХ разве что.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Что-то я не вижу в стандарте указаний на необязательность.

«Complex types are a conditional feature that implementations need not support» - из драфта

wota ★★
()

загляни в реализацию boost spirit. там шаблонная магия на шаблонной магии. твой пример впечатляет только неосиляторов

punya ★★
()
Ответ на: комментарий от wota

«Complex types are a conditional feature that implementations need not support» - из драфта

У меня такой фразы нет. Но есть:

«A strictly conforming program shall use only those features of the language and library specified in this International Standard».

И комплексная арифметика описана именно в стандарте, не в аннексе.

«A conforming hosted implementation shall accept any strictly conforming program. A conforming freestanding implementation shall accept any strictly conforming program that does not use complex types [...]».

Т.е. hosted implementation должна поддерживать комплексную арифметику.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

кстати VLA, оказывается, тоже опциональны

wota ★★
()
Ответ на: комментарий от Begemoth

Скорее XSLT-товаты.

А в XSLT вложенные скобочки? o_O

KRoN73 ★★★★★
()
Ответ на: комментарий от tailgunner

Это не C99, а драфт C11

да - текущий стандарт

Но, насколько я понимаю

мне бы больше подошла цитата из стандарта

wota ★★
()
Ответ на: комментарий от tailgunner

охлол, адресная арифметика такая страшная. пиши уже на своей жабе и не жужжи.

ckotinko ☆☆☆
()
Ответ на: комментарий от tailgunner

Точно то же, что и в C99. 4.5, 4.6.

freestanding заставляет реализовать только небольшой набор указанных хедеров, 6.10.8.3 - очевидно задает отдельные и другие опциональные возможности

wota ★★
()

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

svu ★★★★★
()
Ответ на: комментарий от queen3

с чего вы решили, что я вообще что-то форматировал. у меня не моноширинный шрифт в окне ввода вообще-то. на глаз потыкал пробелов, оказались лишними. ну и пофиг, речь шла о «малой правке». эту же правку можно обернуть в «структуру» с accessorами, которая будет делать то же самое - но зачем?

ckotinko ☆☆☆
()
Ответ на: комментарий от tailgunner

А hosted - все.

нет, только обязательные, более того - использование опциональных возможностей противоречит определению «strictly conforming program»

wota ★★
()
Ответ на: комментарий от tailgunner

Все, перечисленные в стандарте.

это ты себе так придумал, а в стандарте написано про «minimum implementation limit»

wota ★★
()
Ответ на: комментарий от svu

Вот приехал бы Столлман в Россию, объяснил бы исконную американскую правду русским буржуям, и g++ с плюсами бы лучше стали.

quiet_readonly ★★★★
() автор топика

Шаблоны классная фича, да. Но не рекомендую ей увлекаться.
Кроме STL, как правило всегда можно найти обходные пути.

Это я культурно выразил мнение окружающих про «оторвать руки» :)

Kroz ★★★★★
()
Ответ на: комментарий от GAMer

За что вы так к бедным цппшникам?? =)

Так правительство цп вроде как запретило. Или нет? :P

AlexCones ★★★
()
Ответ на: комментарий от tailgunner

Это вообще из другой оперы.

ок, а вот это:

A strictly conforming program can use conditional features (see 6.10.8.3) provided the use is guarded by an appropriate conditional inclusion preprocessing directive using the related macro. For example:
#ifdef _ _STDC_IEC_559_ _ /* FE_UPWARD defined */
/* ... */
fesetround(FE_UPWARD);
/* ... */
#endif

из какой оперы?

wota ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.