Если шаблон функции возвращает decltype(auto)
(или другой спецификатор типа с использованием auto
), но оператор возврата будет плохо сформирован, получается ли результат SFINAE? Является ли утверждение return
непосредственным контекстом сигнатуры функции?SFINAE и decltype (auto)
Ничто в проекте N3690, похоже, не требует этого. По умолчанию, я думаю, SFINAE не применяется.
Это кажется неудачным, потому что вы можете написать функцию для перехода к другой функции, но вы не можете сделать ее существование условным для делегата, как при написании longhand. Кроме того, проверка существования одноранговой функции-члена не может быть выполнена без decltype(auto)
, потому что this
не может использоваться в сигнатуре функции. Однако это указывает на фундаментальную проблему, поскольку decltype(auto)
предоставляет путь к рассмотрению типа класса как полного в пределах сигнатуры участника, где это не так.
Есть предложение было написано, или проблема была формально проанализирована в любом месте?
Умение обрабатывать тип класса как полное в пределах подписки участника может иметь другие последствия ... но это просто фураж для другого вопроса.
Мне было интересно именно это. К сожалению, я тоже слишком ленив, чтобы следовать 1y предложениям ... – sehe
@MarkGarcia Да, это данность. Я только добавил примечание к концу вопроса; члены, не являющиеся шаблонами, могут, возможно, открыть червоточину в сумеречной зоне. – Potatoswatter
Если бы были какие-то примеры в вопросе, было бы легче понять для таких глупостей, как я. :) – iammilind