LINUX.ORG.RU

shared_ptr и старые компиляторы

 ,


0

2

В проекте используется shared_ptr, при сборке юзается --std==c++11

На старых компиляторах (gcc4.4, всякий интел и mpicxx который вроде как тянет текущий gcc?) оно валится. Поавльно дия понимаю, что достаточно заменить

#include <memory>
...
std::shared_ptr
на
#include <tr1/memory>
...
std::tr1::shared_ptr
что бы оно собиралось как на старых, так и на новых компиляторых? Какие гипотетические проблемы при этом возможны на новых компиляторах?

★★★★★
Ответ на: комментарий от AntonI

Можешь ещё в макрос обернуть:

#if __cplusplus >= 201103L
#include <memory>
#else
#include <tr1/memory>
#endif

И что значит оно валится? Ошибку приведи.

UVV ★★★★★
()
Ответ на: комментарий от UVV

error : qualified name is not allowed

Не очень понятно как макрос поможет воткнуть tr1::shared_ptr

Можно конечно для этого совой макрос сделать вроде SHARED_PTR но как то кривовато.

AntonI ★★★★★
() автор топика
Ответ на: комментарий от AntonI

Не очень понятно как макрос поможет воткнуть tr1::shared_ptr

#if __cplusplus >= 201103L
#include <memory>
using std::shared_ptr;
#else
#include <tr1/memory>
using std::tr1::shared_ptr;
#endif

так поможет?

samson ★★
()
Ответ на: комментарий от samson

Если это старье поймет using. В принципе мне с++11 нужно в основном для auto и variadic template, я не помню что там в каком порядке появлялось.

AntonI ★★★★★
() автор топика
Ответ на: комментарий от AntonI

мне с++11 нужно в основном для auto и variadic template

так без --std==c++11 этого не будет. А если компилятор поддерживает c++11, то и shared_ptr уже будет без tr1

тут либо писать под старый компилятор, не используя 11ый стандарт, либо использовать современный стандарт и компилятор, поддерживающий его

samson ★★
()
Последнее исправление: samson (всего исправлений: 1)
Ответ на: комментарий от samson

Насчёт using затупил, спасибо. Если компилятор не поддерживает c++11 он включит c++0x? Вроде как на 4.4 как раз с c++11 собралось, но захотело tr1 для shared ptr.

AntonI ★★★★★
() автор топика
Ответ на: комментарий от AntonI

Если компилятор не поддерживает c++11 он включит c++0x?

Он включит то что вы ему укажите (и если он это поддерживает), либо то что должен по умолчанию.

Проблема то решена?

samson ★★
()
Ответ на: комментарий от AntonI

А вам/вашему коду действительно нужна поддержка компиляторов, старее c++11? Может вообще не стоит заморачиваться на счет старья, сегодня уже 2017ый?

samson ★★
()
Ответ на: комментарий от samson

у нас до сих под поддержка 2000 венды сервера и конпелятор VS2008. Банки матьих и прочие госконторки.

anonymous
()
Ответ на: комментарий от anonymous

а еще старые соплярисы и евойные компиляторы, которые тоже не умеют в 11

anonymous
()
Ответ на: комментарий от samson

Ну нам нужно запускаться на всяких типа суперкомпьютерах, где сплошь и рядом какой весьма древний софт,и ничего свежего поставить нет возможности. Почему я хз. Об gcc4.4 уже который раз бьемся, просто раньше он был не такой дневнючий вроде как (третья цифирька была вроде побольше).

AntonI ★★★★★
() автор топика
Ответ на: комментарий от AntonI

Ну тогда один вариант - писать, используя старый стандарт / использовать всякие фиксы вроде выше описанного...

samson ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.