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 ответов

11 просмотров
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++ я уже выучил

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта