boost::bind нарушава строгите правила за псевдоним?

Използвайки Boost 1.43 и GCC 4.4.3, следният код

boost::bind(&SomeObject::memberFunc, this, _1));

Генерира следното предупреждение

boost/function/function_base.hpp:321: предупреждение: дереферирането на указател с каламбури ще наруши правилата за строги псевдоними

Какъв е правилният начин за елиминиране на тези предупреждения без настройка -fno-strict-aliasing?


person Kyle    schedule 15.06.2010    source източник
comment
Boost не е предназначен или проектиран да не създава предупреждения за всички компилатори. По всяка вероятност това е страничен ефект от използването на boost::bind. Увеличаването на производителността на -fno-strict-aliasing така или иначе е нищожно.   -  person Billy ONeal    schedule 15.06.2010


Отговори (2)


Сигурен ли си, че имаш правилния обект, съвпадащ с класа, в който е функцията член foo? С други думи, в кода, който публикувахте, типът *this същият ли е като SomeObject? Псевдонимите възникват, когато компилаторът трябва да проследи множество указатели от различни типове към едни и същи необработени данни, поради което подозирам, че типът на *this и SomeObject не са еднакви.

person sashang    schedule 15.06.2010
comment
ти си единственият отговор.. поздравления, печелиш. (типовете *this и SomeObject обаче са еднакви.) - person Kyle; 20.06.2010
comment
@Kyle ...Така не работи приемането на отговор. Особено когато (A) този отговор вероятно е трябвало да бъде просто коментар, (B) той пренебрегва факта, че bind почти сигурно използва template съпоставяне на аргументи, за да изисква съвместими (с псевдоним) аргументи указател към метод и указател към екземпляр така или иначе, което означава, че проблемът ще бъде грешка във вътрешността на функцията и (C) вие открито признавате, че това не решава проблема, зададен във вашия въпрос. Така че не го отбелязвайте като отговор! Другият отговор тук това го обяснява. - person underscore_d; 27.08.2016

Само за протокола имах същото предупреждение за boost::bind, използвайки GCC 4.4.3 за Native Client на Google. Предупреждението изчезна след надграждане на boost от версия 1.41.0 на 1.47.0.

person Sigmund    schedule 19.09.2011