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

14 просмотров

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

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

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

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

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
как быть с принтером? такой подход прокатит?
zamtmn
12
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Карта сайта