В чем разница между decltype(auto)
и decltype(returning expression)
как возвращаемым типом функции (шаблона), если expr
используется без круглых скобок в обоих случаях?
auto f() -> decltype(auto) { return expr; } // 1
auto f() -> decltype(expr) { return expr; } // 2
Выше f
может быть определено/объявлено в любом контексте и может быть либо (членной) функцией, либо шаблоном функции (члена), либо даже (общей) лямбдой. expr
может зависеть от любых параметров шаблона.
Во второй версии оба expr
являются точно таким же выражением без дополнительных круглых скобок.
Какие различия можно ожидать, используя первую или вторую форму в С++ 14 и более поздних версиях?
Что делать, если круглые скобки используются повсюду?