@ProCxx

Страница 2280 из 2477
Andrey
14.08.2018
15:58:28
https://godbolt.org/g/n3bVog
так тут же нет generic кода. если функция foo не шаблонная — она точно знает, что ей вызывать. Если шаблонная — то в нее не мог прийти braced-init-list.

Ilia
14.08.2018
16:02:58
потому что topic starter хотел иметь возможность писать `5.times([]{ cout « "hello\n"; })`
Андрей, может повесишь какую-то аватарку, чтобы тебя в потоке отличать можно было бы ? Удобнее.

Google
Ilia
14.08.2018
16:04:36
[Anonymous]
14.08.2018
16:04:51
Спросить у жены разрешения...

Надеюсь он шутит)

Ilia
14.08.2018
16:05:24
Андрей, может повесишь какую-то аватарку, чтобы тебя в потоке отличать можно было бы ? Удобнее.
Если серьёзно, то хоть крестик там поставь, главное -- чтобы было идентично , отличалось от других.

Andrey
14.08.2018
16:17:48
то же самое будет
мы видимо не понимаем друг друга. я говорю о том, что если хочется вызвать std::{begin, swap, hash}, для каких-то аргументов, тип которых мы не знаем (он dependent), то это уже точно не braced-init-ilst, а если мы знаем тип, как в вашем примере, то можно вызывать конкретную функцию. кажется, что "Suggested Design for Customization Points" строго улучшит текущую ситуацию

Constantine
14.08.2018
16:18:47
а пример можно легко адаптировать, чтобы было нельзя вызывать конкретную

потому что один из параметров все еще может быть dependent type

хотя если бы я работал за комитет, я бы начал с того, чтобы ввел тип braced_init_list</*unspecified...*/> и overloaded_function</*unspecified...*/>

т.е. закрыл проблему невозможности выполнить perfect forwarding некоторых сущностей

Google
Andrey
14.08.2018
16:31:51
а пример можно легко адаптировать, чтобы было нельзя вызывать конкретную
Ок, я согласен, что в std::{begin, swap, ...} нельзя передавать braced-init-list. Но я не вижу в этом большой проблемы — всегда же можно сконструировать выражение конкретного типа и передавать уже его. И работать с braced-init-list в generic коде приходится все-таки чуть реже, чем с customization points.

Constantine
14.08.2018
16:32:31
Когда у вас есть customization point под названием utils::build, у вас расклады кардинально меняться начинают

Constantine
14.08.2018
16:33:52
в ваш конретный нешаблоный swap а не std::swap
я вообще-то customization point специализировал

и вызвал

как по-вашему это выглядит, если не так?

мне нужно лишь, что один параметр специализации customization point был закрыт через undeducable_t<>

Andrey
14.08.2018
16:34:55
по-моему ваш пример можно записать как просто вызов [some::]swap

Andrey
14.08.2018
16:35:46
ну вызовите там std::swap
не хочу :) вы, наверное, не правильно прочитали

Constantine
14.08.2018
16:36:32
не хочу :) вы, наверное, не правильно прочитали
я не думаю, что такая сложность заменить myvector на шаблонный параметр T

Andrey
14.08.2018
16:37:09
тогда это записывается как std::swap(x, T {{1, 2, 3}})

Constantine
14.08.2018
16:37:36
это не вызов customization point

не говоря уже об опасностях для ноги

Andrey
14.08.2018
16:38:25
это не вызов customization point
в предположении, что std::swap — это форвардящий фукнтор, а не конкретная фукнция

Google
Constantine
14.08.2018
16:43:35
да
https://godbolt.org/g/FifQ9Q потому что никогда нельзя использовать через qualified name lookup

заметьте, что ответ "false"

как только любую customization point вы вызываете без ADL, у вас срабатывает правила two phase name lookup, которые обладают чудеснейшими особенностями

Constantine
14.08.2018
16:46:10
в частности, важен порядок поключения заголовочных файлов и возникают sequence inconsistency результаты компиляции

это я все знаю, и в вашем примере нет никакого чуда
вообще-то есть, вы не можете достичь этого эффекта (sequence inconsistency!) без шаблонного кода

ни в какой момент чтения исходного кода не было одновременно верно, что unique_ptr является complete type и не определена перегрузка is_null

кроме промежутка 19-29

но вызов снаружи него

Andrey
14.08.2018
16:50:28
вообще-то есть, вы не можете достичь этого эффекта (sequence inconsistency!) без шаблонного кода
нет, просто неправильный пример. я бы понял идею, если бы после #include <memory> вы бы определили is_null в namespace std. А так, что есть перегрузка is_null для std::unique_ptr — все едино

lookup в строке 14 не видит строку 24 — да это ожидаемо

Constantine
14.08.2018
17:06:31
lookup в строке 14 не видит строку 24 — да это ожидаемо
попробуйте так вызвать is_null, не используя шаблонный код и не вторгаясь в 19-29

там же стоит защита от инстанцирования версии по умолчанию до определения класса

Dmitry
14.08.2018
17:25:18
О, или даже split_view замутить. for(auto s: split(str, ',')).

Vitaly
14.08.2018
18:05:23
Здесь это оффтоп. Спроси в @pro_prog.

Egor
14.08.2018
18:05:33
студия 15.8 вышла

Alexander
14.08.2018
18:05:48
студия 15.8 вышла
кинь список изменений плиз

Egor
14.08.2018
18:06:07
https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes#15.8

?
14.08.2018
18:06:12
студия 15.8 вышла
лучше QtCreator??

Google
Egor
14.08.2018
18:06:28
персонально - однозначно

Fox
14.08.2018
18:08:53
https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes#15.8
О, а я толбко поставил обновляться до 15.7.6?

Stanislav
14.08.2018
18:15:28
лучше QtCreator??
но креатор это иде, а студия ещё и компилятор содержит

[Anonymous]
14.08.2018
18:39:00
но креатор это иде, а студия ещё и компилятор содержит
В креаторе же можно компилить проекты

Evgeny
14.08.2018
18:39:30
В креаторе же можно компилить проекты
он компилятор берёт тот, что в системе

если линух, то gcc/clang, если винда, то mingw или виндовый

Anatoly
14.08.2018
18:40:40
В креаторе же можно компилить проекты
Для компиляции нужен компилятор

Не знал?

Constantine
14.08.2018
18:49:22
Не знал?
А я-то думал, что у меня идет не так

Evgeny
14.08.2018
18:49:58
хех, бывает

Anatoly
14.08.2018
18:50:42
Egor
14.08.2018
19:13:20
студия 15.8 вышла
ок, с новым компилятором перестал работать код с шаблонами: https://godbolt.org/g/HWM3xh может кто знает временное решение? обойти бы

Constantine
14.08.2018
19:34:19
ок, с новым компилятором перестал работать код с шаблонами: https://godbolt.org/g/HWM3xh может кто знает временное решение? обойти бы
ээээ херасе, так можно? https://en.cppreference.com/w/cpp/language/template_parameters вроде тут явно запрещено использовать ссылки на строки в качестве шаблонных параметров, нет?

или это относится только к явным литералам?

Egor
14.08.2018
19:35:07
да вроде все компиляторы отрабатывают нормально, вот в 15.8 начал чудить

Constantine
14.08.2018
19:36:29
вообще ситуация очень странная, потому что если я все правильно понял, ссылка в данном случае должна рассматривать не обязательно на constexpr выражение и непонятно, почему s[i] будет constepxr выражением

Egor
14.08.2018
19:38:50
я с трудом тут разбираюсь, мне бы workaround какой) а так с виду он строку(литерал) берёт как указатель, думает, что это инт и не может преобразовать к типу шаблона const char (&)[N]

Constantine
14.08.2018
19:39:33
ну я до этого момента считал, что без макросов в принципе нельзя развернуть строковый литерал в шаблонную последовательность

хотя, возможно, я ошибаюсь и это замечание относится только к ""_suffix_operators

где проблема в способе передачи параметров

Google
Constantine
14.08.2018
19:42:06
а механики constexpr_string работают через constexpr обертки для char (&s)[N]

Страница 2280 из 2477