Обнаружилось такая вот штука. У инсерта появилась шаблонная версия, принимающая шаблонный аргумент по &&. В итоге вот такой код: Код (Text): #include <set> class A; class C { }; class B { private: B(C const&); friend class A; }; bool operator < (B const&, B const&); class A { public: void foo() { std::set<B> s; s.insert(C()); } }; Перестал компилироваться, т.к. раньше создание B происходило инсерта, а теперь происходит внутри. В 2009 студии, а также в камю с включенными C++0x extensions с обоими STL это работает. Кто прав?
Dinkumware гонит? Я так понял, ты имеешь ввиду это template<class _Valty> iterator insert(_Valty&& _Val); Вот все insert из N3092 pair<iterator,bool> insert(const value_type& x); pair<iterator,bool> insert(value_type&& x); iterator insert(const_iterator position, const value_type& x); iterator insert(const_iterator position, value_type&& x); template <class InputIterator> void insert(InputIterator first, InputIterator last); void insert(initializer_list<value_type>);
_DEN_ Вопрос может быть лишь к MS STL, т.е. к стандартности такого шаблонного insert. Сам компилятор здесь, конечно, прав. Comeau на данный момент по объёму реализованных фич C+0x отстаёт от MSVC++. В частности, не имеет поддержки rval refs.
N3092 это финальный черновик стандарта C++ и там такого нет. MS вопрос задавать смысла мало, они ответят что не делают STL, а лицензируют. Можно сабмитить баг.