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

19 просмотров

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

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> как аргумент)

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта