G ++ may_alias с функциями-членами

Как я могу получить приведенный ниже код для компиляции на g ++ 4.7? Он скомпилируется, если я поместу тело foo встроенный, но я не хочу встроенный (потому что реальный код намного сложнее).

struct A
{
void foo();
} __attribute__((__may_alias__));

void A::foo() {}

int main() {return 0;}

Ошибка:

/tmp/test.cpp:6:6: error: prototype for ‘void A::foo()’ does not match any in class ‘A’
/tmp/test.cpp:3:8: error: candidate is: void A::foo()

2

Решение

Поместите атрибут сразу после struct ключевое слово:

struct __attribute__((__may_alias__)) A
{
void foo();
};

void A::foo() {}

int main() {return 0;}

Это работает для моего g ++ 4.7, при этом ставя его после закрытия } выдает ту же ошибку, что и вы.

От документация gcc:

Список спецификаторов атрибутов может отображаться как часть struct, union или же enum спецификатор. Это может пойти либо сразу после struct, union или же enum ключевое слово или после закрывающей скобки. Первый синтаксис является предпочтительным.

(Остальная часть параграфа может показать, что является основной проблемой и почему она работает, когда атрибут помещается перед спецификацией члена.)

Нашел этот вопрос случайно, так как вы получили за него значок [)

1

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

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

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