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