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

12 просмотров

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

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

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта