Следующий фрагмент дает предупреждение:
[C++ Warning] foo.cpp(70): W8030 Temporary used for parameter '_Val' in call to 'std::vector<Base *,std::allocator<Base *> >::push_back(Base * const &)'
.. на указанной строке.
class Base
{
};
class Derived: public Base
{
public:
Derived() // << warning disappears if constructor is removed!
{
};
};
std::vector<Base*> list1;
list1.push_back(new Base);
list1.push_back(new Derived); // << Warning on this line!
Компилятор Codegear C++Builder 2007.
Как ни странно, если конструктор для Derived удаляется, предупреждение исчезает... Это я или компилятор?
РЕДАКТИРОВАТЬ: единственный способ, которым я нашел, чтобы удалить предупреждение, это что-то похожее на это:
Derived * d;
list1.push_back(d = new Derived); // << No warning now...