Передача временных переменных по ссылке
От: slava_phirsov Россия  
Дата: 16.09.09 11:28
Оценка:
"Возможно, я простой провинциальный адвокат и ничего не смыслю в суперзлодеях" ("Братья Вентура")
Доброго времени суток читающим!
Возник вот такой вопрос: я создаю временный экземпляр класса и передаю его в качестве аргумента по ссылке. Вот примитивный тестовы пример:

#include <iostream>

using std::cout;
using std::endl;

class Foo {
    public:
        int m_data;
        
        Foo(const int& data):
            m_data(data) {};
    
    private:
        Foo(const Foo& foo);
};

void proc_foo(const Foo& foo) {
    cout << "Data: " << foo.m_data << endl;
};

int main(int argc, char* argv[]) {
    proc_foo(Foo(5));
    return 0;
};


Компилятор GCC 4.1.2 ругается:

main.cpp: In function ‘int main(int, char**)’:
main.cpp:13: error: ‘Foo::Foo(const Foo&)’ is private
main.cpp:21: error: within this context


Насколько я понял, он не хочет передавать по ссылке созданную при вызове конструктора временную переменную, а хочет передать ее копию. Это по стандарту так, или косяки самого компилятора? Или я чего-то не учел?
Заранее спасибо.
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.