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

Constantine
14.08.2018
15:59:52
разница только в overload resolution

Ilia
14.08.2018
16:02:58

Google

Andrey
14.08.2018
16:03:40

Ilia
14.08.2018
16:04:36

[Anonymous]
14.08.2018
16:04:51
Спросить у жены разрешения...
Надеюсь он шутит)

Ilia
14.08.2018
16:05:24

[Anonymous]
14.08.2018
16:05:48
Чтоб символично было

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
мы видимо не понимаем друг друга. я говорю о том, что если хочется вызвать std::{begin, swap, hash}, для каких-то аргументов, тип которых мы не знаем (он dependent), то это уже точно не braced-init-ilst, а если мы знаем тип, как в вашем примере, то можно вызывать конкретную функцию.
кажется, что "Suggested Design for Customization Points" строго улучшит текущую ситуацию
да, но overload resolution может находить вариант при наличии braced-init-list
а пример можно легко адаптировать, чтобы было нельзя вызывать конкретную
потому что один из параметров все еще может быть 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, у вас расклады кардинально меняться начинают

Andrey
14.08.2018
16:33:36

Constantine
14.08.2018
16:33:52
и вызвал
как по-вашему это выглядит, если не так?
мне нужно лишь, что один параметр специализации customization point был закрыт через undeducable_t<>

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

Constantine
14.08.2018
16:35:08

Andrey
14.08.2018
16:35:46

Constantine
14.08.2018
16:36:32

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

Constantine
14.08.2018
16:38:36

Andrey
14.08.2018
16:42:59

Google

Constantine
14.08.2018
16:43:35
да
https://godbolt.org/g/FifQ9Q
потому что никогда нельзя использовать через qualified name lookup
заметьте, что ответ "false"
как только любую customization point вы вызываете без ADL, у вас срабатывает правила two phase name lookup, которые обладают чудеснейшими особенностями

Andrey
14.08.2018
16:46:08

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

Andrey
14.08.2018
16:50:28
lookup в строке 14 не видит строку 24 — да это ожидаемо

Constantine
14.08.2018
17:06:31
там же стоит защита от инстанцирования версии по умолчанию до определения класса

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

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

Google

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

Fox
14.08.2018
18:08:53

Stanislav
14.08.2018
18:15:28

[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
или это относится только к явным литералам?

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]