SFINAE и decltype (авто)
Если шаблон функции возвращаетсяdecltype(auto)
(или другой спецификатор типа, использующийauto
) но выражение return было бы неверно сформировано, приводит ли SFINAE? Этоreturn
оператор считается непосредственным контекстом функции подписи?
Ничто в проекте N3690, кажется, не требует этого. По умолчанию я думаю, что SFINAE не применяется.
Это кажется неудачным, потому что вы можете написать функцию для пересылки в другую функцию, но вы не можете сделать ее существование обусловленным делегатом, как при написании от руки. Кроме того, проверка наличия равноправной нестатической функции-члена не может быть выполнена безdecltype(auto)
так какthis
не может использоваться в сигнатуре функции. Однако это указывает на фундаментальную проблему, какdecltype(auto)
предоставляет путь к рассмотрению типа класса как завершенного в сигнатуре члена, где он 'нет.
Было ли написано предложение, или проблема была формально проанализирована где-нибудь?
Возможность трактовать тип класса как завершенный в сигнатуре члена может иметь и другие последствия… но это'просто корм для другого вопроса.