Size: a a a

2020 March 13

VO

Vyacheslav Olkhovchenkov in pro.cxx
Побитый Кирпич
Два разных тела у inline функции - UB. Давай придумай как эту ошибку задетектить и не посадить время компиляции в 0
в одном юните разве можно дважды функцию реализовать?
источник

ПК

Побитый Кирпич in pro.cxx
Vyacheslav Olkhovchenkov
в одном юните разве можно дважды функцию реализовать?
В разных юнитах inline функцию
источник

CD

Constantine Drozdov in pro.cxx
Короче, по-моему надо в суп переходить
источник

CD

Constantine Drozdov in pro.cxx
Вряд ли тут стоит обсуждать, что такое ODR для inline функций)
источник

ПК

Побитый Кирпич in pro.cxx
Constantine Drozdov
Это не UB, это IFNDR
На cppreference написано
"The compiler is not required to diagnose this violation, but the behavior of the program that violates it is undefined." Это про нарушение ODR
источник

CD

Constantine Drozdov in pro.cxx
Побитый Кирпич
На cppreference написано
"The compiler is not required to diagnose this violation, but the behavior of the program that violates it is undefined." Это про нарушение ODR
Ну в стандарте будет прямо ill-formed, что соответствует при диагностике ошибке компиляции
источник

ПК

Побитый Кирпич in pro.cxx
Constantine Drozdov
Ну в стандарте будет прямо ill-formed, что соответствует при диагностике ошибке компиляции
ЕМНИП программа содержащая UB по стандарту тоже ill formed
источник

CD

Constantine Drozdov in pro.cxx
Побитый Кирпич
ЕМНИП программа содержащая UB по стандарту тоже ill formed
well-formed
C++ program constructed according to the syntax rules, diagnosable semantic rules, and the one-definition rule
ill-formed
not well-formed
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
Побитый Кирпич
В разных юнитах inline функцию
ну если она инлайнится -- то ошибки вообще нет. мало ли что она одинаково называется. если не инланиться -- забота линкера. можно тупо побайтово сравнить, кажется до 13 стандарта это было просто запрещенно.
источник

А

Андрей in pro.cxx
Vyacheslav Olkhovchenkov
ну если она инлайнится -- то ошибки вообще нет. мало ли что она одинаково называется. если не инланиться -- забота линкера. можно тупо побайтово сравнить, кажется до 13 стандарта это было просто запрещенно.
13 стандарт?
источник

CD

Constantine Drozdov in pro.cxx
Андрей
13 стандарт?
секретный
источник

ПК

Побитый Кирпич in pro.cxx
Vyacheslav Olkhovchenkov
ну если она инлайнится -- то ошибки вообще нет. мало ли что она одинаково называется. если не инланиться -- забота линкера. можно тупо побайтово сравнить, кажется до 13 стандарта это было просто запрещенно.
> ну если она инлайнится -- то ошибки вообще нет

Всего лишь undefined behavior
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
c++14
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
с чего бы это?
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
static inline f() в разных можулях ты имеешь полное право по разному делать
источник

ПК

Побитый Кирпич in pro.cxx
Vyacheslav Olkhovchenkov
ну если она инлайнится -- то ошибки вообще нет. мало ли что она одинаково называется. если не инланиться -- забота линкера. можно тупо побайтово сравнить, кажется до 13 стандарта это было просто запрещенно.
> можно тупо побайтово сравнить

То есть ради ошибки которая проявляется в гавнокоде в 0.000001% случаев делать лишний оверхед на остальные ~100% кода?
источник

ПК

Побитый Кирпич in pro.cxx
Vyacheslav Olkhovchenkov
static inline f() в разных можулях ты имеешь полное право по разному делать
static inline - уже оксюморон
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Побитый Кирпич
static inline - уже оксюморон
static extern
источник

CD

Constantine Drozdov in pro.cxx
Побитый Кирпич
static inline - уже оксюморон
зачем оно вообще компилируется?)
источник

FF

Flex Ferrum in pro.cxx
Побитый Кирпич
static inline - уже оксюморон
На митапе в Mail.ru выяснилось, что нет.
источник