Re[2]: compiler error: no appropriate default constructor av
От: Bender Bending Rodriguez Россия  
Дата: 02.04.10 15:20
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>У меня нет 2008-й, и ты не привел полный список параметров, но по коду 2005-й,

RB>
RB>template<class _InIt, class _FwdIt, class _Alloc>
RB>inline    _FwdIt _Uninit_move(
RB>

RB>соответствует версии _Uninit_move для типов с поддержкой _Swap_move_tag.
RB>Категория move определяется выше по стеку вызовов, и задается явным перечислением типов.

да, действительно, так и есть есть
template<class _InIt, class _FwdIt, class _Alloc>
inline
    _FwdIt _Uninit_move(_InIt _First, _InIt _Last, _FwdIt _Dest,
        _Alloc& _Al, _Swap_move_tag, _Range_checked_iterator_tag)


её реализация требует наличия конструктора по умолчанию для элементов последовательности.

а у _Swap_move_tag ноги растут отсюда:

<xutulity>
template<class _Ty>
    struct _Is_swap_move
    {    // assumes _Ty is not _Swap_move_tag
    static const bool _Value = false;
    };

template<>
    struct _Is_swap_move<_Swap_move_tag>
    {    // reports true for _Swap_move_tag
    static const bool _Value = true;
    };

template<class _Ty1,
    class _Ty2>
    class _Move_operation_category<pair<_Ty1, _Ty2> >
    {    // reports true if either member of pair is _Swap_move_tag
public:
    typedef typename _If<
        _Is_swap_move<typename _Move_operation_category<
            _Ty1>::_Move_cat>::_Value ||                /// false для класс A
        _Is_swap_move<typename _Move_operation_category<
            _Ty2>::_Move_cat>::_Value,                  /// true для vector< int > (смотри на _Move_operation_category для вектора)
        _Swap_move_tag,
        _Undefined_move_tag>::_Result _Move_cat;            /// получаем _Swap_move_tag, что выглядит несколько странно.
    };

<vector>

    // vector implements a performant swap
template <class _Ty, class _Ax>
    class _Move_operation_category<vector<_Ty, _Ax> >
    {
    public:
        typedef _Swap_move_tag _Move_cat;
    };


Вот такие пироги.
Похоже, что пирожок был испечён SP1 для VS2008
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.