![]() |
|
|
![]()
|
|
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
Здравствуйте.
Имеется такой код:
А теперь самое интересное: в gcc 4.1.2 это не линкуется - http://codepad.org/LB1506hR в gcc 4.3.2 линкуется - http://ideone.com/q1Uik8 в gcc 4.5.2 опять не линкуется - это уже на моей машине. ссылку дать не могу. в gcc 4.7.2 снова линкуется - http://ideone.com/rP6zIF Вопрос: ошибка у меня и необходимо добавить
или ошибка в компиляторах, в которых не линкуется ? И вообще, что за чехарда с компиляторами (вернее с версиями) ? Или м.б. это какая-то настройка (на ideoone она включена, а у меня и на codepad нет) ? Если да, то какая ? Спасибо. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
Вы уверены в версии? (возможно еще разные версии выходили параллельно (?не знаю), то есть возможно еще год релиза нужно смотреть) В шестой студии тоже нельзя было инициализировать стат.константы в классе. В поздних версиях уже можно. Почему? Видимо в силу тумнности выражений стандарта С++, создатели компиляторов не вкурили его достаточно глубоко. Посему старые версии такое не переваривают. Новые же версии, (даже с ключами например -std=c++98), переваривают нормально.
|
||||
|
|||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
> Вы уверены в версии?
Да, вроде. Вызывал g++ -v и он выдал 4.5.2. По поводу года не скажу. Он был в поставке с Ubuntu 11.04. Интересно то, что ошибка линковки возникает только если брать адрес (сылку) этой переменной (в моём случае это std::min). Если же использовать только как rvalue, то ошибки нет. Я, всё-таки, склоняюсь к мнению, что тут дело в настройках компилятора... -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
||||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
||||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
borisbn, Да я понимаю ваше молчание...
Действительно, с какого это перепуга, правильность кода (компилируемость) зависит от введения/невведения оптимизации. Код либо правильный, либо нет. Оптимизация на это не должна никак влиять. Очень похоже на баг gcc. (Хотя логически понять причины такого поведения можно) Вот максимально-сокращенный код который не компилируецца у меня на gcc 4.7.0 ни при каких оптимизациях. Но кстати, прекрасно компилицца на студии.
Приглашаюцца к обуждению опытные gcc-шники, зубры-линуксоиды, а также вообще знатоки приплюснутых стандартов. Велкам... |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
volatile, не.. я не по этому молчал. Вы попросили посмотреть параметры компиляции на моей машине, а её у меня на время забрали.
А по поводу оптимизации - вроде в online-компиляторах она выключена... И да.. не должна она влиять. Единственное - м.б. есть какая-то опция, влияющая на такое поведение ?
Поддерживаю. Ждёмс. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
Это сообщение отредактировал(а) mes - 9.6.2013, 12:49 |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
mes, ваша цитата мимо кассы. здесь говорицца для случая когда нет инициализации в описании класса. (Кстати в этом случае и студия компилировать не будет) И потом, давайте оставим студию, раз вас так она раздражает. Сам факт что компилируемость кода зависит от оптимизации, уже достаточно стрёмен, не находите ? Это сообщение отредактировал(а) volatile - 9.6.2013, 23:26 |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
как по мне, так тут как раз таки грицца о случае, когда она есть при декларации внутри класса, и ее отсутвии вне класса..
да, это баг.. приведенный последний пример не должен компи линковаться ни при каких оптимизациях.. за исключением случая, когда факт использования взятия адреса с'оптимизирован ни капли не раздражает, просто у них свой взгляд на вещи и ориентироваться по ней на стандартность поведения "рискованно" Это сообщение отредактировал(а) mes - 13.6.2013, 19:48 |
||||
|
|||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
||||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
Да и кстати, в окончательном варианте стандарта 2011, вашей цитаты, вообще нет (по крайне мере в данном пункте, и ближайших окрестностях). Дальше идёт про другое... Так что спорить о переводе не известно откуда взятой фразы, не имеет смысла. Добавлено @ 00:27 ![]() Это сообщение отредактировал(а) volatile - 14.6.2013, 00:38 |
|||
|
||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
ну так с более 10ка лет был актуален другой стандарт, в котором эта фраза была актуальна.. ну и ?? обратили внимание на constexpr specifier ? и гдепродолжение цитаты, которое описывает приведенный Вами случай ? пару строчек ниже :
Добавлено @ 01:02 если внимательно прочитали цитату, то
в общем случае сомнительно считать багом, если линкуется потому, что оптимизатор выкинул ненужные связи.. Это сообщение отредактировал(а) mes - 14.6.2013, 01:04 |
||||||
|
|||||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
mes, Ну хорошо, давайте предположим на миг что ваша трактовка верна, В вашей цитате ведь говорицца вообще о "статической константе" как таковой. Там нет ни слова ни о взятии адреса, ни о чем либо подобном. Что означает (если трактовать по вашему), абсолютно правильный компилятор вообще не должен принимать статическую константу, без отдельного определения ее где-то в *.cpp Не только взятие адреса (о котором, повторяю нет ни слова), но и именно саму константу! Именно так ваша трактовка и звучит. Не больше и не меньше. Но gcc, вашей трактовке не соответствует, даже с ключом -pedantic. (тестовый код элементарен, не привожу) Более того, вашей трактовке, не соответствует ни один известный мне компилятор. Так что смысла продолжать дисскуссию не вижу. |
|||
|
||||
| mes |
|
||||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
давайте хоть на миг )
не совсем, в середине цитате говорится еще об использовании константного выражения ассоциированного с константой
нет, Вы не правильно трактуете мою трактовку.. так упустили то самое предложение из середины цитаты.. и не обратили почему же стоит "still" и "if" в последнем предложении, которые явно намекают, что должна быть еще одна ситуация..
о взятии ни слова, но есть слова об использовании константы и использовании константного выражения... Акцент на взятии адреса был потому, что подобное использование никак нельзя отнести к константому выражению.. именно так Вы хотите ее воспринимать.. не моей )) так действительно, чего продолжать если подменяете сказанное своими ожиданиями услышанного.. |
||||||||
|
|||||||||
![]()
|
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | GNU toolchain | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |