VS2010: Шаблонный insert в std::set

Тема в разделе "LANGS.C", создана пользователем _DEN_, 27 июн 2010.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Обнаружилось такая вот штука. У инсерта появилась шаблонная версия, принимающая шаблонный аргумент по &&. В итоге вот такой код:

    Код (Text):
    1. #include <set>
    2.  
    3. class A;
    4. class C { };
    5.  
    6. class B
    7. {
    8. private:
    9.     B(C const&);
    10.     friend class A;
    11. };
    12.  
    13. bool operator < (B const&, B const&);
    14.  
    15. class A
    16. {
    17. public:
    18.     void foo()
    19.     {
    20.         std::set<B> s;
    21.         s.insert(C());
    22.     }
    23. };
    Перестал компилироваться, т.к. раньше создание B происходило инсерта, а теперь происходит внутри. В 2009 студии, а также в камю с включенными C++0x extensions с обоими STL это работает. Кто прав?
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Перестал компилироваться, т.к. раньше создание B происходило снаружи инсерта,
     
  3. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    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>);
     
  4. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    _DEN_
    Вопрос может быть лишь к MS STL, т.е. к стандартности такого шаблонного insert. Сам компилятор здесь, конечно, прав.
    Comeau на данный момент по объёму реализованных фич C+0x отстаёт от MSVC++. В частности, не имеет поддержки rval refs.
     
  5. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    N3092 это финальный черновик стандарта C++ и там такого нет. MS вопрос задавать смысла мало, они ответят что не делают STL, а лицензируют. Можно сабмитить баг.