auto_ptr_ref
От: jdan  
Дата: 26.12.06 13:16
Оценка:
решил использовать auto_ptr_ref и обнаружил интересное поведение, что на разных компиляторах получаются разные значения, пример кода:

template<class T> std::auto_ptr_ref<T> function(std::auto_ptr_ref<T> p)
{
    std::auto_ptr<T> p1(p);
    std::cout<<typeid(T).name()<<" "<<p1.get()<<std::endl;
    return p1;
}

int main()
{
    std::auto_ptr<int> p(new int(123));
    p = function<int>(p);
}

на gcc все работает отлично, но реализация auto_ptr_ref не соответствует описанной в стандарте по С++
на cl 8 от майка все падает, поскольку auto_ptr_ref соответсвует стандарту по С++
Цитата из стандарта:
"Template auto_ptr_ref holds a reference to an auto_ptr. It is used by the auto_ptr conversions
to allow auto_ptr objects to be passed to and returned from functions."
соответственно возвращать из функции ссылку на что-то непонятное очень нехорошо...
соответственно на майке если сделать статической p1 в функции function то все будет работать.
Вот я и думаю, кто же в этом случае не прав — я (как всегда ), майк, gcc или, блин, стандарт какую-то фигню описывает?
Re: auto_ptr_ref
От: shank  
Дата: 26.12.06 13:25
Оценка:
Здравствуйте, jdan, Вы писали:

J>решил использовать auto_ptr_ref и обнаружил интересное поведение

Хм... ИМХО, auto_ptr_ref не используют непосредственно в коде, это деталь реализации.
Re: auto_ptr_ref
От: Pavel Chikulaev Россия  
Дата: 26.12.06 14:50
Оценка:
Здравствуйте, jdan, Вы писали:

J>решил использовать auto_ptr_ref и обнаружил интересное поведение, что на разных компиляторах получаются разные значения, пример кода:

[snipped]
J>на gcc все работает отлично, но реализация auto_ptr_ref не соответствует описанной в стандарте по С++
J>на cl 8 от майка все падает, поскольку auto_ptr_ref соответсвует стандарту по С++
J>Цитата из стандарта:
J>"Template auto_ptr_ref holds a reference to an auto_ptr. It is used by the auto_ptr conversions
J>to allow auto_ptr objects to be passed to and returned from functions."
J>соответственно возвращать из функции ссылку на что-то непонятное очень нехорошо...
J>соответственно на майке если сделать статической p1 в функции function то все будет работать.
J>Вот я и думаю, кто же в этом случае не прав — я (как всегда ), майк, gcc или, блин, стандарт какую-то фигню описывает?

auto_ptr_ref не предназначен для непосредственного использования, он нужен для того чтобы такой код работал и всё:
std::auto_ptr<int> foo();
void bar(std::auto_ptr<int>);

int main()
{
   bar(foo());
}

Т.е. иметь возможность получить неконстантую ссылку на r-value для последующей move semantics.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.