Подтвердить что ты не робот

Является ли '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 везде.

4b9b3361

Ответ 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;.