Size: a a a

2020 August 20

CD

Constantine Drozdov in pro.cxx
d7d1cd
Какая возможность должна быть в компиляторе, чтобы он понял этот пример правильно? Можно ли как-то проверить наличие этой возможности на простом примере?
Должно быть std::initializer_list, стандарт на него ссылается по имени
источник

N

Nikitin Alexey in pro.cxx
Anatoly Tomilov
не вижу противоречия или чего-то невозможного
просто внесение новых имен в std это ub, насколько я помню. Скорее всего ничего не сломается, но вдруг..
источник

АК

Александр Караев... in pro.cxx
d7d1cd
Какая возможность должна быть в компиляторе, чтобы он понял этот пример правильно? Можно ли как-то проверить наличие этой возможности на простом примере?
ну вот сходим в libstdc++:
https://code.woboq.org/gcc/libstdc++-v3/libsupc++/initializer_list.html#61
намёк понятен?
источник

AT

Anatoly Tomilov in pro.cxx
источник

CD

Constantine Drozdov in pro.cxx
https://en.cppreference.com/w/cpp/language/overload_resolution
5) A list-initialization sequence L1 is better than list-initialization sequence L2 if L1 initializes an std::initializer_list parameter, while L2 does not.
вот
источник

АК

Александр Караев... in pro.cxx
а теперь меняем std на mystd и получаем:
main.cpp: In function 'int main()':
main.cpp:48:24: error: deducing from brace-enclosed initializer list requires '#include <initializer_list>'
источник

AT

Anatoly Tomilov in pro.cxx
Александр Караев
а теперь меняем std на mystd и получаем:
main.cpp: In function 'int main()':
main.cpp:48:24: error: deducing from brace-enclosed initializer list requires '#include <initializer_list>'
ему не надо mystd
источник

AT

Anatoly Tomilov in pro.cxx
ему надо std
источник

АК

Александр Караев... in pro.cxx
Anatoly Tomilov
ему не надо mystd
так если в его компиляторе нет std::initializer_list, значит он и не умеет в deducing from brace-enclosed initializer list и это не прокатит)
источник

АК

Александр Караев... in pro.cxx
только если кто-то не взял и не удалил из std один файл (бу-га-га!)
источник

АК

Александр Караев... in pro.cxx
если компилятор поддерживает initializer_list, то и в либе он есть.
и наоборот
источник

O

Ofee in pro.cxx
Александр Караев
так если в его компиляторе нет std::initializer_list, значит он и не умеет в deducing from brace-enclosed initializer list и это не прокатит)
Компилятор может уже уметь, а стандартная бибилиотека может ещё не уметь
источник

AT

Anatoly Tomilov in pro.cxx
Nikitin Alexey
просто внесение новых имен в std это ub, насколько я помню. Скорее всего ничего не сломается, но вдруг..
чем отличаются исходники libc++ или libstdc++? Они магические? Их набирали руки Разработчиков Стандартной Библиотеки и вот они годятся?
источник

AT

Anatoly Tomilov in pro.cxx
Александр Караев
так если в его компиляторе нет std::initializer_list, значит он и не умеет в deducing from brace-enclosed initializer list и это не прокатит)
он хочет проверить, есть ли в компиляторе поддержка. В стандартной библиотеке, которая с ним идёт, может не быть.
источник

CD

Constantine Drozdov in pro.cxx
Anatoly Tomilov
чем отличаются исходники libc++ или libstdc++? Они магические? Их набирали руки Разработчиков Стандартной Библиотеки и вот они годятся?
Да, они магические, в компиляторе стоят ифы на их сущности
источник

AT

Anatoly Tomilov in pro.cxx
Constantine Drozdov
Да, они магические, в компиляторе стоят ифы на их сущности
)) а чем их сущности-то отличаются? Они закодированы в битах и байтах, а электроны — это фермионы, они неразличимы.
источник

CD

Constantine Drozdov in pro.cxx
Anatoly Tomilov
)) а чем их сущности-то отличаются? Они закодированы в битах и байтах, а электроны — это фермионы, они неразличимы.
Именем отличаются.
источник

AT

Anatoly Tomilov in pro.cxx
Constantine Drozdov
Да, они магические, в компиляторе стоят ифы на их сущности
если я сделаю cp /usr/include/c++/10.1.0/initializer_list $HOME/include и заинклюжу $HOME/include вперёд системных, то всё. Пространственно-временной континуум из-за парадокса порвётся в районе моего компьютера?
источник

CD

Constantine Drozdov in pro.cxx
Anatoly Tomilov
если я сделаю cp /usr/include/c++/10.1.0/initializer_list $HOME/include и заинклюжу $HOME/include вперёд системных, то всё. Пространственно-временной континуум из-за парадокса порвётся в районе моего компьютера?
Вот смотри, легендарная реализация std::less::operator() (T a, T b) { return a < b; }
Можно это повторить? Нет, у тебя не будут указатели как надо сравниваться
источник

ПК

Побитый Кирпич... in pro.cxx
Anatoly Tomilov
если я сделаю cp /usr/include/c++/10.1.0/initializer_list $HOME/include и заинклюжу $HOME/include вперёд системных, то всё. Пространственно-временной континуум из-за парадокса порвётся в районе моего компьютера?
Просто UB Будет
источник