Сообщение Re[3]: специализация для rvalue ссылок от 21.08.2020 18:44
Изменено 21.08.2020 18:45 rg45
Re[3]: специализация для rvalue ссылок
Здравствуйте, sergii.p, Вы писали:
SP>Здравствуйте, B0FEE664, Вы писали:
SP>оно конечно работает. Но теперь я ничего не понимаю Почему условия разные? Они получается не покрывают 100% случаев?
Тут весть фокус в том, что, поскольку Collection — шаблонный параметр, Collection&& — это особый вид ссылки, Называемый forwarding reference. Эти ссылки "всеядны" в том смысле что могут сопоставляться не только с rvalue ссылками, но и с lvalue. Благодаря своей всеядности функции с такими ссылками в параметрах способны выигрывать борьбу за подстановку там, где это не ожидается. Для того, чтобы вторая прегрузка использовалась только для rvalue выкфжений, подстановку lvalue выражений нужно блокировать при помощи SFINAE, как показал B0FEE664.
SP>Здравствуйте, B0FEE664, Вы писали:
SP>оно конечно работает. Но теперь я ничего не понимаю Почему условия разные? Они получается не покрывают 100% случаев?
Тут весть фокус в том, что, поскольку Collection — шаблонный параметр, Collection&& — это особый вид ссылки, Называемый forwarding reference. Эти ссылки "всеядны" в том смысле что могут сопоставляться не только с rvalue ссылками, но и с lvalue. Благодаря своей всеядности функции с такими ссылками в параметрах способны выигрывать борьбу за подстановку там, где это не ожидается. Для того, чтобы вторая прегрузка использовалась только для rvalue выкфжений, подстановку lvalue выражений нужно блокировать при помощи SFINAE, как показал B0FEE664.
Re[3]: специализация для rvalue ссылок
Здравствуйте, sergii.p, Вы писали:
SP>Здравствуйте, B0FEE664, Вы писали:
SP>оно конечно работает. Но теперь я ничего не понимаю Почему условия разные? Они получается не покрывают 100% случаев?
Тут вефокус в том, что, поскольку Collection — шаблонный параметр, Collection&& — это особый вид ссылки, Называемый forwarding reference. Эти ссылки "всеядны" в том смысле, что могут сопоставляться не только с rvalue ссылками, но и с lvalue. Благодаря своей всеядности функции с такими ссылками в параметрах способны выигрывать борьбу за подстановку там, где это не ожидается. Для того, чтобы вторая прегрузка использовалась только для rvalue выкфжений, подстановку lvalue выражений нужно блокировать при помощи SFINAE, как показал B0FEE664.
SP>Здравствуйте, B0FEE664, Вы писали:
SP>оно конечно работает. Но теперь я ничего не понимаю Почему условия разные? Они получается не покрывают 100% случаев?
Тут вефокус в том, что, поскольку Collection — шаблонный параметр, Collection&& — это особый вид ссылки, Называемый forwarding reference. Эти ссылки "всеядны" в том смысле, что могут сопоставляться не только с rvalue ссылками, но и с lvalue. Благодаря своей всеядности функции с такими ссылками в параметрах способны выигрывать борьбу за подстановку там, где это не ожидается. Для того, чтобы вторая прегрузка использовалась только для rvalue выкфжений, подстановку lvalue выражений нужно блокировать при помощи SFINAE, как показал B0FEE664.