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

Template<Typename X, typename Y> auto summ(X x, Y y) -> decltype(x

+ y){
return x + y;
}

int main() {
using namespace std;

cout << summ(123, "312312312") << endl;

return 0;
}

что здесь происходит и почему это вообще компилируется?

27 ответов

16 просмотров

Адресная арифметика

N-U Автор вопроса
Anatoly Shirokov
Адресная арифметика

сумма адресов параметров?

N U
сумма адресов параметров?

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

https://godbolt.org/z/MoPv7PfWd auto (int, const char *) -> decltype(x + y) вот так можно сдампить кусочек AST и увидеть, какая инстанциация шаблона вызывается

Ilya Zviagin
И получается UB

Не получается, если ты не будешь разадресовывать полученный указатель

N U
сумма адресов параметров?

Суммы адресов не бывает, бессмысленная операция

Ilya Zviagin
И получается UB

А в чем UB или выход за границу без чтения/записи сам по себе UB?

Vlad
https://godbolt.org/z/MoPv7PfWd auto (int, const c...

(приятно советовать фичи компилятора, которые сам писал)

Sergey Anisimov
Не, уже на сумме получается, увы.

Да, получается невалидный адрес

AnTINooBL
что делает decltype?

преобразует выражение к его типу

Ilya Zviagin
Да, получается невалидный адрес

разве невалидный адрес это уже уб? а как же std::vector::end?

AnTINooBL
тип же string

https://t.me/supapro/1276441 нет

Vlad
https://t.me/supapro/1276441 нет

кстати, __PRETTY_FUNCTION__ всегда верно отображает инстанциацию?

Vlad
https://t.me/supapro/1276441 нет

все равно не особо понял

.
разве невалидный адрес это уже уб? а как же std::v...

Любой адрес какого-то объекта валидин только в пределах этого объекта Ну то есть вообще любой адрес должен находиться в пределах какого-то объекта объект - Это переменная языка си плюс плюс. Если у тебя допустим в памяти находится в последовательных адресах два объекта и ты каким-то образом в вышел адресом на пространство между этими двумя объектами, при условии что это пространство есть, либо адресом перешёл от одного объекта к другому объекту, то это уже некорректная операция Согласно буквы стандарта точка на практике так такое практически никогда не даёт никаких отрицательных побочных эффектов в условиях современных операционных систем. Но каких-нибудь старых операционных системах и на старых процессорах, Как пример это просто старый добрый DOS,

Ilya Zviagin
И получается UB

выход за пределы массива? или тут что-то глубже?

.
кстати, __PRETTY_FUNCTION__ всегда верно отображае...

<dependent type> summ(X, Y) [X = int, Y = const char *] хм. ожидал что возвращаемое значение будет известно

Алексей (lewa_j) Иванчуков
<dependent type> summ(X, Y) [X = int, Y = const ch...

можно вывести этот макрос внутри шаблонной функции которая приняла этот <dependent type> как аргумент)

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
3
Карта сайта