170 похожих чатов

Почему gcc на это не ругается и просто игнорирует constexpr? template<class> constexpr

void test() {
std::cout << std::endl;
}

int main() {
test<void>();
return 0;
}

А вот на это ругается и не игнорирует?
constexpr void test() {
std::cout << std::endl;
}

int main() {
test();
return 0;
}

23 ответов

13 просмотров
Kirill 🚜- Автор вопроса

В общем-то, причины мне не особо интересны - мне нужно узнать как заставить его ругаться не только во втором, но и в первом случае. Чтобы он не игнорировал constexpr

Kirill 🚜- Автор вопроса
Liber Azerate
Зарепорть как багу

Я не думаю что это бага, потому что у clangа такое же поведение

Kirill 🚜
Я не думаю что это бага, потому что у clangа такое...

Ну вообще, программа явно ill-formed, если в констекспр функции вызывается неконстекспр функция. Может, конечно, для шаблонов функций поведение другое, но есть у меня Большииие сомнения

В чём заключается игнорирование constexpr ?

Kirill 🚜- Автор вопроса
Ilya Zviagin
В чём заключается игнорирование constexpr ?

https://godbolt.org/z/rc31zn Асм-код совсем не consexpr-ный

Kirill 🚜- Автор вопроса
Kirill 🚜
https://godbolt.org/z/rc31zn Асм-код совсем не co...

Ну и как оно вообще скомпилилось то... Нельзя писать в поток в compile-time

Ilya Zviagin
А с чего он должен?

Ну вообще просто в констекспр запрещён вызов неконстекспр функций и всё

Kirill 🚜
Ну и как оно вообще скомпилилось то... Нельзя писа...

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

Kirill 🚜- Автор вопроса
Kirill Bolshakov
Ну асм код не аргумент

Для constexpr функций не должно быть инструкции call, разве нет?

Kirill 🚜
Ну и как оно вообще скомпилилось то... Нельзя писа...

int main() { test<void>(); return 0; } тут нет constexpr-контекста.

Kirill 🚜- Автор вопроса
Ilya Zviagin
int main() { test<void>(); return 0; } ту...

А если убрать шаблон - то появляется или что? Компилер ругаться начинает

Kirill 🚜
Для constexpr функций не должно быть инструкции ca...

Главное я другого не понимаю: весь остальной С++ вы уже выучили? Что вам этот constexpr так упёрся? Он нужен раз в 10 лет.

Kirill 🚜- Автор вопроса
Kirill 🚜
А если убрать шаблон - то появляется или что? Комп...

И если шаблон убрать тоже call может быть. Тут дело в другом - в детекте компилятора

Kirill 🚜- Автор вопроса
Kirill 🚜
Да, весь остальной C++ я уже выучил

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

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта