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