Является ли 'auto a_class:: f (...) → T const' неоднозначным в грамматике?
Как должен интерпретировать описанный ниже прототип функции-члена в С++ 11?
class C {
public:
auto f(...) -> T const;
}
Мне кажется, что это может быть либо функция-член const класса C, либо не-константная функция-член, которая возвращает значение const типа T.
Я знаю, что могу просто написать функцию как
T const f(...);
или
T f(...) const;
Тем не менее, я хочу быть в курсе того, как я объявляю функции, поэтому я решил использовать новый способ С++ 11 auto f(...) -> RetType
везде.
Ответы
Ответ 1
Тип возвращаемого типа возвращается после cv- и ref-квалификаторов нестатической функции-члена. Это означает, что пример в вопросе такой же, как T const f(...);
.
§8.4.1 [dcl.fct.def.general] p2
Декларатор в определении функции должен иметь вид
D1
(параметр-объявление-предложение) cv-qualifier-seq opt ref-qualifier opt спецификация исключений-спецификация opt specifier-seq opt trailing-return-type opt
Чтобы объявить функцию-член const
, вы должны написать auto f(...) const -> T const;
.