Неопределенность C ++ 11 между декларатором и абстрактным декларатором в предложении параметра?

Рассмотрим следующий код C ++ 11:

struct C {};

void f(int(C));

Это тип f такой же как:

typedef int T(C);
void f(T);

или это как:

void f(int C);

То есть, если (C) быть интерпретированным как declarator имени параметра Cили как abstract-declarator параметра функции?

Где это указано в стандарте?

8

Решение

Это указано в 8.2p7

7
Другая неоднозначность возникает в параметре объявление-объявление в объявлении функции или в идентификаторе типа, который
является операндом оператора sizeof или typeid, когда имя типа вложено в скобки. В этом случае,
выбор между объявлением параметра указателя типа на функцию и объявлением
параметр с избыточными круглыми скобками вокруг идентификатора объявления. Решение состоит в том, чтобы рассмотреть имя типа
как спецификатор простого типа, а не как идентификатор объявления.

Следовательно, ваш параметр имеет тип int(*)(C), как вы показываете в своей первой возможной интерпретации.

12

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]