В чем разница между decltype(auto)
и decltype(returning expression)
как возвращаемый тип функции (шаблон), если expr
используется без круглых скобок в обоих случаях?В чем разница между decltype (auto) и decltype (return expr) как возвращаемый тип?
auto f() -> decltype(auto) { return expr; } // 1
auto f() -> decltype(expr) { return expr; } // 2
Над f
могут быть определены/объявлены в любом контексте и может быть либо функцией (член) или (член) шаблон функции, или даже (всего) лямбда. expr
может зависеть от любых параметров шаблона.
Во второй версии оба expr
являются точно такими же выражениями без дополнительных круглых скобок.
Какие различия можно ожидать, используя первую или вторую форму в C++ 14 и более поздних версиях?
Что делать, если круглые скобки используются повсюду?
'auto f() -> decltype ([] {}) {return {}; } 'будет работать? – Orient
@Orient nopes, извините –
Как вы думаете, проблема [this] (https://llvm.org/bugs/show_bug.cgi?id=23141) как-то связана с этим вопросом? – Orient